Spring Boot 使用 JUnit5 提供的@ParameterizedTest
注解实现参数化测试,同时要配合其它注解完成参数源配置。
一、自定义测试执行名称
@ParameterizedTest
默认的测试执行名称格式为[序号]参数1=XXX, 参数2=YYY...
,可以通过修改name
属性自定义测试执行名称。
@ParameterizedTest(name = "第 {index} 次测试,参数:{0}")
@ValueSource(ints = { 1, 10, 100 })
public void test(int value) {
Assertions.assertTrue(value < 100);
}
复制代码
测试执行名称为:
第 1 次测试,参数:1
第 2 次测试,参数:10
第 3 次测试,参数:100
复制代码
如果参数有多个,则依次为:{0}
、{1}
、{2}
...
二、参数数据源
1. @ValueSource
@ValueSource
数据源支持以下类型的数组:
short
byte
int
long
float
double
char
java.lang.String
java.lang.Class
以int
类型为例,以下方法会测试 3 次,第 3 次参数为 100 时测试结果为 Fail。
@ParameterizedTest
@ValueSource(ints = { 1, 10, 100 })
public void test(int value) {
Assertions.assertTrue(value < 100);
}
复制代码
2. @NullSource
在使用字符串作为入参时,有时可能会用到null
,不能直接将null
写入@ValueSource
注解的strings
数组中(编译器会报错)。
@ValueSource(strings = { null, "X", "Y", "Z" })
复制代码
正确的方法是使用@NullSource
注解。
@ParameterizedTest
@NullSource
@ValueSource(strings = { "X", "Y", "Z" })
public void test(String value) {
System.out.println("Param: " + value);
}
复制代码
3. @EmptySource
同@NullSource
类似,使用字符串作为入参时如果需要使用空字符串,可以使用@EmptySource
。
@ParameterizedTest
@EmptySource
@ValueSource(strings = { "X", "Y", "Z" })
public void test(String value) {
System.out.println("Param: " + value);
}
复制代码
与@NullSource
不同的是,可以直接在@ValueSource
注解的strings
数组中写空字符串参数,编译器不会报错。
@ValueSource(strings = { "", "X", "Y", "Z" })
复制代码
4.