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 – パラメータ化]