前言
testng 比 junit5 拥有更强大的用例组织灵活性,但是 junit5 拥有相比于 testng 更加丰富是传参方式
ValueSource
使用方法
@ParameterizedTest
@ValueSource(stirngs = {"1", "2"})
public void demo(String str) {
assert str.equals("1");
}
这样会执行两遍。这种形式上很像 testng 的 Parameters 注解,只不过 testng 的 param 是从 testng.xml 中传上来的
实际项目
在多场景的测试中,简单多参数的情况下建议使用 ValueSource 注解
MethodSource
使用方法
public static Stream<String> function() {
return Stream.of("a", "b");
}
@ParameterizedTest
@MethodSource("function")
public void testDemo(String str) {
assert str.equals("b");
}
这种形式会执行两轮 demoTest,第一次 str=a,第二次 str=b
另外还有其他样式,如下:
@ParameterizedTest
@MethodSource("function")
public void testDemo(String str1, String str2) {
Assertions.assertAll(
() -> {assert str1.equals("c");},
() -> {assert str2.equals("d");}
);
}
public static Stream<Arguments> function() {
return Stream.of(Arguments.arguments("a", "b"), Arguments.arguments("c", "d"));
}
这种形式可以发现有两轮参数,第一轮是 a 和 b,第二轮是 c 和 d,一个 arguments 表示一轮,所以会执行两次 testDemo,第一次传 a 和 b,第二次传 c 和 d
实际项目
相比于轻量级的 ValueSource,MethodSource 很像 testng 中的 DataProvider。ValueSource 做简单参数传递,而 MethodSource 指定的方法中可以写一些逻辑代码,然后传多种类型参数,包括对象,数据源可以使 yaml,json,xml 等其他。这种方式来做数据驱动也是一个不错的选择
CsvSource
使用方法
@ParameterizedTest
@CsvSource({
"num1, 1",
"num2, 2",
"num3, 3"
})
public void testDemo(String str, int n) {
System.out.println(str);
System.out.println(n);
}
通过在 CsvSource 中写上类似 csv 格式的传参来实现数据传递,可以与 ValueSource 作比较
实际项目
对于简单的数据可以使用这种方式
CsvFileSource
使用方法
这一种是通过文件的形式来传参了,是属于数据文件驱动
@ParameterizedTest
@CsvFileSource(resources = "src\main\resources\xxx.csv")
public void testDemo(String str) {
System.out.println(str);
}
我们看下 csv 怎么写呢,首先 csv 存放在 java 的 recourses 下
param1
param2
param3
其他
NullSource
通过标上@NullSource
注解可以传 null 到方法中
@ParameterizedTest
@NullSource
EmptySource
通过标上@EmptySource
注解可以传一个""
空值到方法中
@ParameterizedTest
@EmptySource