JUnit – 参数化测试 云少 2019-12-14 2019-12-14 十四、JUnit – 参数化测试 Junit 4 引入了一个新的功能参数化测试 。参数化测试允许开发人员使用不同的值反复运行同一个测试。你将遵循 5 个步骤来创建参数化测试 。
用 @RunWith(Parameterized.class) 来注释 test 类。 创建一个由 @Parameters 注释的公共的静态方法,它返回一个对象的集合(数组)来作为测试数据集合。 创建一个公共的构造函数,它接受和一行测试数据相等同的东西。 为每一列测试数据创建一个实例变量。 用实例变量作为测试数据的来源来创建你的测试用例。 一旦每一行数据出现测试用例将被调用。让我们看看活动中的参数化测试。
创建一个类 在 C:\ > JUNIT_WORKSPACE 创建一个叫做 PrimeNumberChecker.java 的 java 类来测试。 1 2 3 4 5 6 7 8 9 10 public class PrimeNumberChecker { public Boolean validate (final Integer primeNumber) { for (int i = 2 ; i < (primeNumber / 2 ); i++) { if (primeNumber % i == 0 ) { return false ; } } return true ; } }
创建 Parameterized Test Case 类 创建一个叫做 PrimeNumberCheckerTest.java 的 java 类。 在 C:> JUNIT_WORKSPACE 中创建一个文件名为 PrimeNumberCheckerTest.java 的 java 类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 import java.util.Arrays;import java.util.Collection;import org.junit.Test;import org.junit.Before;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;import org.junit.runner.RunWith;import static org.junit.Assert.assertEquals;@RunWith(Parameterized.class) public class PrimeNumberCheckerTest { private Integer inputNumber; private Boolean expectedResult; private PrimeNumberChecker primeNumberChecker; @Before public void initialize () { primeNumberChecker = new PrimeNumberChecker (); } public PrimeNumberCheckerTest (Integer inputNumber, Boolean expectedResult) { this .inputNumber = inputNumber; this .expectedResult = expectedResult; } @Parameterized .Parameters public static Collection primeNumbers () { return Arrays.asList(new Object [][] { { 2 , true }, { 6 , false }, { 19 , true }, { 22 , false }, { 23 , true } }); } @Test public void testPrimeNumberChecker () { System.out.println("Parameterized Number is : " + inputNumber); assertEquals(expectedResult, primeNumberChecker.validate(inputNumber)); } }
创建 TestRunner 类 在 C:> JUNIT_WORKSPACE 中创建一个文件名为 TestRunner.java 的 java 类来执行测试用例
1 2 3 4 5 6 7 8 9 10 11 12 13 import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;public class TestRunner { public static void main (String[] args) { Result result = JUnitCore.runClasses(PrimeNumberCheckerTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
用 javac 编译 PrimeNumberChecker,PrimeNumberCheckerTest 和 TestRunner 类。
1 2 C:\JUNIT_WORKSPACE>javac PrimeNumberChecker.java PrimeNumberCheckerTest.java TestRunner.java
现在运行 TestRunner,它将运行由提供的 Test Case 类中所定义的测试用例。
1 C:\JUNIT_WORKSPACE>java TestRunner
验证输出。
1 2 3 4 5 6 Parameterized Number is : 2 Parameterized Number is : 6 Parameterized Number is : 19 Parameterized Number is : 22 Parameterized Number is : 23 true