junit一个测试方法测试多种数据
有些方法参数有许多特殊值,或者说他的参数分为很多歌区域,为了简化类似的测试,JUnit4提出了“参数化测试”的概念,只写一个测试函数,把这若干种情况作为参数传递进去,一次性的完成测试。
首先,要为这种测试专门生成一个新的类,而不能与其他测试共用同一个类,此例中我们定义了一个SquareTest类。
然后,要为这个类指定一个Runner,而不能使用默认的Runner了,因为特殊的功能要用特殊的Runner嘛。@RunWith(Parameterized.class)这条语句就是为这个类指定了一个ParameterizedRunner。
第三步,定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果。
接下来,定义测试数据的集合,就像下面的data()方法,该方法可以任意命名,但是必须使用@Parameters标注进行修饰。这个方法的框架就不予解释了,大家只需要注意其中的数据,是一个二维数组,数据两两一组,每组中的这两个数据,一个是参数,一个是你预期的结果。比如我们的第一组{2,4},2就是参数,4就是预期的结果。这两个数据的顺序无所谓,谁前谁后都可以。
之后是构造函数,其功能就是对先前定义的两个参数进行初始化。在这里你可要注意一下参数的顺序了,要和上面的数据集合的顺序保持一致。如果前面的顺序是{参数,期待的结果},那么你构造函数的顺序也要是“构造函数(参数,期待的结果)”,反之亦然。最后就是写一个简单的测试例了,和前面介绍过的写法完全一样,在此就不多说。
代码如下:
importstaticorg.junit.Assert.assertEquals;
importorg.junit.Test;
importorg.junit.runner.RunWith;
importorg.junit.runners.Parameterized;
importorg.junit.runners.Parameterized.Parameters;
importjava.util.Arrays;
importjava.util.Collection;
@RunWith(Parameterized.class)
publicclassSquareTest...{
privatestaticCalculatorcalculator=newCalculator();
privateintparam;
privateintresult;
@Parameters
publicstaticCollectiondata()...{
returnArrays.asList(newObject[][]...{
{2,4},
{0,0},
{-3,9},
});
}
//构造函数,对变量进行初始化
publicSquareTest(intparam,intresult)...{
this.param=param;
this.result=result;
}
@Test
publicvoidsquare(){
calculator.square(param);
assertEquals(result,calculator.getResult());
}
}