JUnit参数化测试之@Parameters示例

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

参数化测试是使用不同的值反复执行相同的测试。它可以帮助开发人员在执行相同的测试时节省时间,这些测试只是在输入和预期结果上有所不同。

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

考虑一个简单的测试,对不同的数字求和。代码可能看起来像-

JUnit Parameterized Test
JUnit Parameterized Test

上述方法会导致大量冗余。

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

创建参数化JUnit测试的步骤

以下代码显示了参数化测试的示例。它测试算术类的 sum() 方法:

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

JUnit Parameterized Test
JUnit Parameterized Test

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

JUnit Parameterized Test
JUnit Parameterized Test

代码说明

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

JUnit Parameterized Test
JUnit Parameterized Test

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

JUnit Parameterized Test
JUnit Parameterized Test

代码行32、33:创建一个二维数组(为加法提供输入参数)。因为,方法输入的返回类型是集合。

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

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

考虑一下要素

{1,2,3}

这里

firstNumber=1

secondNumber=2

预期结果=3

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

步骤5) 完整的代码

JUnit Parameterized Test
JUnit Parameterized Test

代码说明:

  • 代码行25:使用@Before注释设置资源(此处为AirMatharith.class)。它包含了考试的前提条件。
  • 代码行36:使用@Test注释创建我们的测试。
  • 代码行39:创建一条Assert语句来检查我们的总和是否与我们预期的相等。

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

JUnit Parameterized Test
JUnit Parameterized Test

代码说明:

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

输出:

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

JUnit Parameterized Test
JUnit Parameterized Test

在控制台上查看结果,结果显示添加了两个数字:-

JUnit Parameterized Test
JUnit Parameterized Test

总结:

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

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

  • @RunWith
  • @Parameters

IT赶路人

专注IT知识分享