Junit5-参数化:
maven3.8+java15+idea2022.2
- 一周掌握Junit5
学习内容:
实现参数化需要将下面的依赖引入到pom.xml
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
- 使用注解ParameterizedTest
使用@ParameterizedTest注解来代替@Test注解,单参数化注解使用@ValueSource ,多参数注解 @CsvSource,如果这两个注解@ParameterizedTest@Test同时使用则会多执行一次
单参数:
@ParameterizedTest
@ValueSource(strings={"张三","小明","小红"})//几个参数,就执行几次
void testParamString(String name){
System.out.println(name);
}
@ParameterizedTest
@ValueSource(ints = {10,20,30})
void testParamInt(int num){
assertTrue(num < 100);
System.out.println(num);
}
多参数时,默认参数之间用英文逗号隔开
多参数:
@ParameterizedTest
@CsvSource({"小明,10,一班"})
void MultParams(String name,int age,String className ){
System.out.println("name:"+name+" age:"+age+" classname:"+className);
}
//注:CsvSource也支持单参数
- 多参数时,指定参数分隔符
//指定分隔符“-”
@ParameterizedTest
//下面2个参数,第一个参数为“小明,三年级”,第二个参数"18"
@CsvSource(value = {"小明,三年级-18"},delimiterString = "-")//delimiterString指定分隔符
void SplitParam(String name,int age){
System.out.println("name:" + name+" age:"+age);
}
//能解决,参数中需要包含英文逗号的问题
- 参数文件
参数可以从指定csv文件中读取,在resources目录下创建csv文件,参数之间用相同分隔符分割,例如 “,”,"|"等。
此时使用的注解为 @CsvFileSource
@ParameterizedTest
@CsvFileSource(resources = "/data.csv")
void ParamByFile(String name, Integer age) {
System.out.println("name:" + name + " age:" + age);
}
//参数使用|分隔
@ParameterizedTest
@CsvFileSource(resources = "/data2.csv",delimiterString = "|")
void ParamByFile2(String name, int age) {
System.out.println("name:" + name + " age:" + age);
}
- 动态参数
上面介绍的方法都是参数方法,都有一个特点,就是参数是静态写死的,有时候,程序的参数需要需要动态创建,也就是执行某些方法,生成测试中需要的参数,并传入测试方法中,这就用到了@MethodSource,该注解主要是引入动态数据源方法,来获取参数,动态数据源方法一定是个静态方法,对应关系如图:
这里记录一下具体的使用:
(1)需要一个参数的用例,下面方法只需要传入一个String型参数,动态数据源方法需要返回一个内部是String型参数的结构
(2)需要传多个参数
这里就需要使用Arguments类型来表示返回多个类型参数,Argument是一个接口类,能返回多个Object类型的参数,使用如下如所示
(3)如果@MethodSource注解不填值,将默认引用与测试方法同名的静态方法作为动态参数源