JUNIT4 笔记(八) 参数化测试

为了用不同的参数测试同一个逻辑,需要写多个测试用例,出现代码冗余。一种不是很好的解决方案是在一个测试用例中采用循环的方式遍历参数。
@Test public void testAdd(){
int[][] array = new int[][]{
{2,1,1}, //1+1=2,能成功
{6,2,2}, //2+2!=6,不能成功
{7,2,5}, //2+5=7,能成功
};
for(int i=0; i<array.length; i++){
assertEquals(array[i][2], array[i][0]+array[i][1]);
}
}

这样在执行时有几个问题:1、出错了,难以精确定位是哪一对参数出错。2、前面的数据不能执行成功,后面的数据就不执行了。(上面的例子,2+5=7就不会执行)。

为了解决这个问题:
JUnit4引入了参数化测试。

import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class MyTestcase {
private int sum ;
private int firstAddend;
private int secondAddend;

@Parameters
public static Collection<Integer[]> getData(){
return Arrays.asList(new Integer[][]{
{2,1,1},
{6,2,2},
{7,2,5},
});
}

public MyTestcase(int sum, int firstAddend, int secondAddend){
this.sum = sum;
this.firstAddend = firstAddend;
this.secondAddend = secondAddend;
}

@Test public void testDivide(){
assertEquals(sum, firstAddend + secondAddend);
}
}

执行时,为每套参数创建一个测试类实例,这样就解决了刚才的两个问题:

说明:
@RunWith(Parameterized.class):@RunWith用来指定测试运行器,这里指定的运行器是Parameterized.class。
@Parameters: 指定测试用例构成器使用的参数,要求是公有无参数的类方法,返回值要求能够造型为Collection<Object[]>。在实例化测试类时,将Object[]数组传给其构造器。
构造器:一般测试类可以采用Java默认的构造器,参数化测试类要求与@Parameters修饰的获取参数的方法的返回值对应。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值