Logo
Section 1 / 5

简单参数化测试

了解如何使用参数化测试,并自定义显示名称。

导入

简单参数化测试

了解如何使用参数化测试,并自定义显示名称。

简单的显示名称

在 JUnit 5 中,我们可以使用 @RepeatedTest 使测试运行多次。然而,这些重复执行都是相同的。@RepeatedTest 只是反复运行同一个测试。若要以不同方式多次运行测试,可以使用参数化测试。

与 @RepeatedTest 类似,org.junit.jupiter.params.ParameterizedTest 注解也可以替代 @Test。测试方法至少需要一个参数,并且必须提供至少一个数据源来为每次调用提供实际参数。在下面的代码中,测试方法 simpleValue 拥有一个整型参数 num,我们断言 num 应该是偶数(能被 2 整除)。org.junit.jupiter.params.provider.ValueSource 注解用于提供静态参数值。这里我们提供了三个整数。

在下面的代码中,simpleValue() 方法中的 assertTrue() 用于检查条件。如果满足 num % 2 == 0,则条件通过;否则失败。

1public class ParametrizedTest { 2 @org.junit.jupiter.params.ParameterizedTest 3 @org.junit.jupiter.params.provider.ValueSource(ints = {1, 2, 4}) 4 @DisplayName("simple") 5 void simpleValue(final int num) { 6 assertTrue(num % 2 == 0); 7 } 8}

运行后,我们可以看到每个测试的显示名称格式为 [1] 1。这是不同测试执行的默认模式 [{index}] {arguments}。我们可以通过 name 属性自定义显示名称。与 @RepeatedTest 的属性名一样,@ParameterizedTest 的 name 属性也支持占位符。

参数化测试显示名称中使用的占位符

占位符描述
{index}当前调用的 1 开始的索引
{arguments}以逗号分隔的参数列表
{0}, {1}按索引编号的单个参数

自定义显示名称

下面的代码展示了如何自定义显示名称。自定义名称在第 2 行定义。

1public class CustomParaTest { 2 @org.junit.jupiter.params.ParameterizedTest(name = "Run #{index} => {arguments}") 3 @org.junit.jupiter.params.provider.ValueSource(ints = {1, 2, 4}) 4 @DisplayName("custom display name") 5 void customDisplayName(final int num) { 6 assertTrue(num % 2 == 0); 7 } 8}

依赖注入

@ValueSource 和 @EnumSource