什么是Junit中的参数化测试?
参数化测试是使用不同的值反复执行相同的测试。它可以帮助开发人员在执行相同的测试时节省时间,这些测试只是在输入和预期结果上有所不同。
使用参数化测试,可以设置从某个数据源检索数据的测试方法。
考虑一个简单的测试,对不同的数字求和。代码可能看起来像-
上述方法会导致大量冗余。
我们需要一种简单的方法。使用参数化测试,只需添加一个方法来输入10个数据输入,测试将自动运行10次。
创建参数化JUnit测试的步骤
以下代码显示了参数化测试的示例。它测试算术类的 sum() 方法:
步骤1) 创建类。在本例中,我们将使用sum(int,int)方法输入两个数字,该方法将返回给定数字的总和
步骤2) 创建参数化测试类
代码说明
- 代码行11:使用@RunWith(Parameterized.class) 注释测试类。
- 代码行13:将变量“firstNumber”声明为私有,类型声明为int。
- 代码行14:将变量“secudNumber”声明为私有,并将类型声明为int。
- 代码行15:将变量“expectedResult”声明为私有,类型声明为int。
- 代码行16:将变量“airThemic”声明为私有,将类型声明为AirTheme。
@runwith (class_name.class): @runwith注释用于指定其运行器类名 。如果我们没有指定任何类型作为参数,运行库将默认选择BlockJunit4ClassRunner。
此类负责使用新测试实例运行的测试。它负责调用JUnit生命周期方法,如Setup(关联资源)和 teardown(释放资源) 。
要参数化,需要使用@RunWith进行注释,并传递需要测试的.class
步骤3) 创建存储测试数据的构造函数。它存储3个变量
步骤4) 创建生成并返回测试数据的静态方法。
代码行32、33:创建一个二维数组(为加法提供输入参数)。因为,方法输入的返回类型是集合。
代码行30:使用@Parameters注释创建一组输入数据来运行我们的测试。
由@Parameters注释标识的静态方法返回一个集合,其中集合中的每个条目都将是测试的一次迭代的输入数据。
考虑一下要素
{1,2,3}
这里
firstNumber=1
secondNumber=2
预期结果=3
在这里,每个数组元素将被传递给构造函数,一次一个,因为类被多次实例化。
步骤5) 完整的代码
代码说明:
- 代码行25:使用@Before注释设置资源(此处为AirMatharith.class)。它包含了考试的前提条件。
- 代码行36:使用@Test注释创建我们的测试。
- 代码行39:创建一条Assert语句来检查我们的总和是否与我们预期的相等。
步骤6) 创建一个测试运行器类来运行参数化测试:
代码说明:
- 代码行8:声明将运行我们的JUnit测试的类测试的Main方法。
- 代码行9:使用JunitCore.runclass执行测试用例时,它将接受测试类名作为参数(在我们的示例中,我们使用的是AirMatharith.class)。
- 代码行11:使用for循环处理结果,打印失败结果。
- 代码行13:打印成功结果。
输出:
以下是显示测试成功且没有故障跟踪的输出,如下所示:
在控制台上查看结果,结果显示添加了两个数字:-
总结:
参数化测试使开发人员能够使用不同的值反复执行相同的测试。
参数化过程中要使用的重要注解
- @RunWith
- @Parameters