JUnit4.X 的参数化测试 为保证单元测试的严谨性,通常会模拟不同的测试数据来测试方法的处理能力 为此我们需要编写大量的单元测试的方法,可是这些测试方法都是大同小异的 它们的代码结构都是相同的,不同的仅仅是测试数据和期望值 这时可以使用 JUnit4 的参数化测试,提取测试方法中相同代码 ,提高代码重用度 参数化测试的要点
① 准备使用参数化测试的测试类必须由 org.junit.runners.Parameterized 运行器修饰
② 准备数据。数据的准备需要在一个方法中进行,该方法需要满足的要求如下
1) 该方法必须由 org.junit.runners.Parameterized.Parameters 注解 修饰
2) 该方法必须为返回值是 java.util.Collection 类型的 public static 方法
3) 该方法没有参数 ,方法名可随意 。并且该方法是在该类实例化之前执行的
③ 为测试类声明几个变量 ,分别用于存放期望值和测试所用的数据
④ 为测试类声明一个带有参数的公共构造函数 ,并在其中为③ 中声明的变量赋值
⑤ 编写测试方法,使用定义的变量作为参数进行测试
Junit 4 参数化测试 允许通过变化范围的参数值来测试方法。参数擦测试可以通过以下简单的步骤实现:
1. 对测试类添加注解 @RunWith(Parameterized.class)
2. 将需要使用变化范围参数值测试的参数定义为私有变量
3. 使用上一步骤声明的私有变量作为入参,创建构造函数
4. .创建一个使用@Parameters 注解的公共静态方法,它将需要测试的各种变量值通过集合的形式返回。
5. 使用定义的私有变量定义测试方法例:
/** * 数学计算-->加法 */
Add类:
public class Add { public int add(int a, int b) { return a + b; } }
AddTest类:
import static org.junit.Assert.*; import java.util.Collection; import java.util.Arrays; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; //Step 1:对测试类添加注解 @RunWith(Parameterized.class) @RunWith(Parameterized.class) public class AddTest { //Step 2:将需要使用变化范围参数值测试的参数定义为私有变量 private int inputNumberA; private int inputNumberB; private int except; //Step 3:使用上一步骤声明的私有变量作为入参,创建构造函数 public AddTest(int inputNumberA,int inputNumberB,int except) { super(); this.inputNumberA=inputNumberA; this.inputNumberB=inputNumberB; this.except=except; } //Step 4:创建一个使用@Parameters 注解的公共静态方法,它将需要测试的各种变量值通过集合的形式返回。 @Parameters public static Collection<Object[]> data(){ Object[][] data = new Object[][] { {2,2,4}, {-1,-2,-3}, {2,5,5} }; return Arrays.asList(data); } @Test public void test() { // fail("Not yet implemented"); System.out.println(inputNumberA+"+"+inputNumberB+"="+except); Add add = new Add(); int result = add.add(inputNumberA, inputNumberB); Assert.assertEquals(except,result); } }