JUnit-参数化测试
参数化测试允许开发人员使用不同的值反复运行同一个测试。
5个步骤创建参数化测试
- 用 @RunWith(Parameterized.class) 来注释 test 类。
- 创建一个由 @Parameters 注释的公共的静态方法,它返回一个对象的集合(数组)来作为测试数据集合。
- 创建一个公共的构造函数,它接受和一行测试数据相等同的东西。
- 为每一列测试数据创建一个实例变量。
- 用实例变量作为测试数据的来源来创建你的测试用例。
下面通过测试案例实现参数化测试
创建一个PrimeNumberChecker.java类
- 在这个类里实现一个validate()方法,对传进来的数据进行处理,并返回一个布尔值
package 参数化测试;
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;
}
}
创建一个测试类PrimeNumberCheckerTest.java
- @RunWith()的使用
- @Parameterized.Parameters的使用
package 参数化测试;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
private int inputNumber;
private boolean expectedResult;
private PrimeNumberChecker primeNumberChecker;
@Before
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}
public PrimeNumberCheckerTest(int 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("得到的参数是:"+inputNumber);
assertEquals(expectedResult,primeNumberChecker.validate(inputNumber));
}
}
创建一个TestRunner.java执行测试案例
package 参数化测试;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import 执行测试.TestJunit;
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());
}
}
测试结果