JUnit – パラメータ化されたテスト
JUnitでは、次のメソッドを使用して、ユニットテストメソッドにパラメータを渡すことができます。
-
コンストラクタ
-
`@ Parameter`によるフィールド注入
P.S JUnit 4.12
でテスト済み
1. MatchUtils – 複数のパラメータでテストする
簡単な追加操作。
MathUtils.java
package com.mkyong.examples; public class MathUtils { public static int add(int a, int b) { return a + b; } }
1.2 MatchUtils – コンストラクタを介してパラメータ化される
パラメータは、コンストラクタを介してテストメソッドに渡されます。
ParameterizedTest.java
package com.mkyong; import com.mkyong.examples.MathUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Arrays; import java.util.Collection; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(value = Parameterized.class) public class ParameterizedTest { private int numberA; private int numberB; private int expected; //Inject via constructor //for {8, 2, 10}, numberA = 8, numberB = 2, expected = 10 public ParameterizedTest(int numberA, int numberB, int expected) { this.numberA = numberA; this.numberB = numberB; this.expected = expected; } //name attribute is optional, provide an unique name for test //multiple parameters, uses Collection<Object[]> @Parameters(name = "{index}: testAdd({0}+{1}) = {2}") public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ {1, 1, 2}, {2, 2, 4}, {8, 2, 10}, {4, 5, 9}, {5, 5, 10} }); } @Test public void test__addTwoNumbes() { assertThat(MathUtils.add(numberA, numberB), is(expected)); } }
1.3 MatchUtils – フィールドインジェクションによるパラメータ化
パラメータは、フィールド注入を介して試験方法に渡される。
ParameterizedTest.java
package com.mkyong; import com.mkyong.examples.MathUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.junit.runners.Parameterized.Parameter; import java.util.Arrays; import java.util.Collection; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(value = Parameterized.class) public class ParameterizedTest { //default value = 0 @Parameter(value = 0) public int numberA; @Parameter(value = 1) public int numberB; @Parameter(value = 2) public int expected; @Parameters(name = "{index}: testAdd({0}+{1}) = {2}") public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ {1, 1, 2}, {2, 2, 4}, {8, 2, 10}, {4, 5, 9}, {5, 5, 10} }); } @Test public void test__addTwoNumbes() { assertThat(MathUtils.add(numberA, numberB), is(expected)); } }
出力
2. DomainUtils – 単一のパラメータでテストする
別の簡単なクラスで、ドメイン名を検証します。
DomainUtils.java
package com.mkyong.examples; import java.util.regex.Pattern; public class DomainUtils { private static final String DOMAIN__NAME__PATTERN = "^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$"; private static Pattern pDomainName = Pattern.compile(DOMAIN__NAME__PATTERN); public static boolean isValid(String domainName) { return pDomainName.matcher(domainName).find(); } }
2.1 DomainUtilsパラメータ化されたテスト
パラメータは、フィールド注入を介して試験方法に渡される。
ParameterizedTest.java
package com.mkyong; import com.mkyong.examples.DomainUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(value = Parameterized.class) public class Parameterized2Test { //default value = 0 @Parameter public String domainName; //Single parameter, use Object[] @Parameters(name = "{index}: testDomain - {0}") public static Object[]data() { return new Object[]{ "google.com", "mkyong.com", "twitter.com" }; } @Test public void test__valid__domain() { assertThat(DomainUtils.isValid(domainName), is(true)); } }
出力
-
Note ** + TestNGはユニットテストにパラメータを渡す方法においてより柔軟です。このリンクを読んでください://unittest/testng-tutorial-6-parameterized-test/[TestNG parameter test]
参考文献
-
link://正規表現/ドメイン名 – 正規表現例/[Domain
パラメータ付きJavaDoc]。 link://unittest/testng-tutorial-6-parameterized-test/[TestNGパラメータ
テスト]。
http://piotrturski.github.io/zohhak/
[Zohhak – JUnitパラメータ化された
Wiki – パラメータ化]