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