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());

}

}

相关推荐