使用 @Parameters 的 JUnit 参数化测试示例

Junit 中的参数化测试是什么?

参数化测试是使用不同的值重复执行相同的测试。它帮助开发人员节省时间,避免执行仅输入和预期结果不同的相同测试。

使用参数化测试,可以设置一个从某些数据源检索数据的测试方法。

考虑一个简单的测试来求和不同的数字。代码可能如下所示:

Parameterized Test in Junit

上述方法导致大量冗余。

我们需要一个简单的方法。使用参数化测试,您只需添加一个方法来输入 10 个数据,您的测试将自动运行 10 次。

创建参数化 JUnit 测试的步骤

以下代码显示了一个参数化测试的示例。它测试 Arithmetic 类的 sum() 方法

步骤 1) 创建一个类。在这个例子中,我们将使用 sum (int,int) 方法输入两个数字,该方法将返回给定数字的和。

Steps to Create a Parameterized JUnit Test

步骤 2) 创建一个参数化测试类

Steps to Create a Parameterized JUnit Test

代码解释

  • 代码行 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 个变量。

Steps to Create a Parameterized JUnit Test

步骤 4) 创建一个生成并返回测试数据的静态方法。

Steps to Create a Parameterized JUnit Test

代码行 32,33: 创建一个二维数组(提供加法输入参数)。使用 asList 方法,我们将数据转换为 List 类型。因为方法输入的返回类型是集合。

代码行 30: 使用 @Parameters 注解创建一组输入数据来运行我们的测试。

由 @Parameters 注解标识的静态方法返回一个 Collection,其中 Collection 中的每个条目都将是测试一次迭代的输入数据。

考虑元素

{1,2,3}

这里

firstNumber = 1

secondNumber = 2

expectedResult = 3

这里,每个数组元素将逐个传递给构造函数,因为该类被实例化多次。

步骤 5) 完整代码

Steps to Create a Parameterized JUnit Test

代码解释

  • 代码行 25: 使用 @Before 注解来设置资源(这里是 Airthematic.class)。@Before 注解在这里用于在每个测试用例运行之前执行。它包含测试的前提条件。
  • 代码行 36: 使用 @Test 注解创建我们的测试。
  • 代码行 39: 创建一个断言语句,检查我们的和是否与预期相符。

步骤 6) 创建一个测试运行器类来运行参数化测试

Steps to Create a Parameterized JUnit Test

代码解释

  • 代码行 8: 声明将运行我们 JUnit 测试的类测试的主方法。
  • 代码行 9: 使用 JunitCore.runclasses 执行测试用例,它将把测试类名作为参数(在我们的示例中,我们使用 Airthematic.class)。
  • 代码行 11: 使用 for 循环处理结果并打印出失败结果。
  • 代码行 13: 打印出成功结果。

输出

以下是显示成功测试且没有失败跟踪的输出,如下所示:

Steps to Create a Parameterized JUnit Test

查看控制台结果,显示两个数字的加法:-

JUnit Parameterized Test

摘要

参数化测试使开发人员能够使用不同的值重复执行相同的测试。

参数化过程中要使用的重要注解

  • @RunWith
  • @Parameters