声明参数化
导入注解
<!-- junit5新的编程和扩展模型--> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.8.2</version> <scope>test</scope> </dependency> <!--Junit5参数化依赖--> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.8.1</version> <scope>test</scope> </dependency>
1、一个参数
- 将@test注解改为@ParameterizedTest,声明是一个参数化测试类,注:test 和parameterizedTest不可以一起用
- 传递参数数据,使用@ValueSourse注解定义关键字进行类型声明
- 测试方法前加入形参,接收参数化数据
// 场景一个参数的情况很少 public class ValueSourceDemoTest { // 1、将@Test竹节换为@ParameterizedTest,不可以结合使用 // 声明测试类是一个参数化测试类 // 2、传递参数数据 // 使用单参数注解@ValueSource定义关键字进行类型声明 @ValueSource(strings = {"张三","李四","王五"}) // 3、在测试方法上加入形参,接收参数化数据 @ParameterizedTest void valueSourceDemo(String name){ System.out.println(name); assertEquals(name.length(),2); } }
2、多个参数
第一种形式
public class CscSourceDemoTest { // 1、声明一个参数化的测试类 @ParameterizedTest // 2、使用CsvSource进行传递参数化数据,传递的参数的格式是一个集合 // 如果是多个参数,默认分割符 "," @CsvSource({"哈利,12", "赫敏,13", "罗恩,14"}) void csvSourceDemo(String name,int age){ System.out.println(name + "的年龄是" + age); } @ParameterizedTest // 使用delimiterString = "-"修改默认参数符 @CsvSource(value = {"哈利-12", "赫敏-13", "罗恩-14"},delimiterString = "-") void csvSourceDemo2(String name,int age){ System.out.println(name + "的年龄是" + age); } // 也可以进行单参数 // @CsvSource({"哈利", "赫敏", "罗恩"}) // void csvSourceDemo(String name){ // System.out.println(name); // } }
第二种形式
- 使用@paramterizedTest进行声明参数化测试
- 使用MethodSource("stringProvider") 指定提供数据源的方法名
- 定义一个静态方法,提供参数化数据源
- 填加形参,要与静态方法中定义的元素类型一致
- @MethodSource不提供方法名采用默认方法名一致的静态数据提供方法
public class MethodSourceTestDemo { // 1.声明参数化 @ParameterizedTest // 2.通过MethodSource("") 指定数据源的方法名 @MethodSource("stringProvider") // 4.添加形参,要和静态方法中定义的元素类型一致 void methodSourceDemo(String name){ System.out.println(name); } // 3.定义一个静态方法,提供参数化数据源 static Stream<String> stringProvider(){ return Stream.of("张三","李四"); } // 1.声明参数化 @ParameterizedTest // 2.采用MethodSource,默认指定与方法命名的静态数据源 @MethodSource // 4.添加形参,要和静态方法中定义的元素类型一致 void methodSourceDemo1(String name){ System.out.println(name); } // 3.定义一个静态方法,提供参数化数据源 static Stream<String> methodSourceDemo1(){ return Stream.of("张三","李四"); } }
传入多个对象参数
// 多参数 public class MulitiMethodSourceDemoTest { // 1 @ParameterizedTest // 2 @MethodSource("objectProvider") // 4 void multiMethodSourceDemo(String name,Integer age){ System.out.println(name + "的年龄是" + age); } // 3 static Stream<Arguments> objectProvider(){ return Stream.of( Arguments.arguments("哈利",5), Arguments.arguments("赫敏",6) ); } }
3、以文件作为参数
public class CsvFileSourceDemoTest{ // 声明参数化数据 // @CsvFileSource 声明关键字 // 文件前要加"/" @ParameterizedTest @CsvFileSource(resources = "/data.csv") void csvFileSourceDemo1(String name,int age){ System.out.println(name + "的年龄是" + age); } @ParameterizedTest
// 进行规定分割符 @CsvFileSource(resources = "/data2.csv",delimiterString = "|") void csvFileSourceDemo2(String name,int age){ System.out.println(name + "的年龄是" + age); } }
4、传入空参
public class EmptySourceDemoTest {
// 1、声明是一个参数化
@ParameterizedTest
// 2、使用EmptySource注解
@EmptySource
void nullSourceDemo(String param){
System.out.println(param);
}
}
5、传入null
public class NullSourceDemoTest { // 1、声明是一个参数化 @ParameterizedTest // 2、使用NullSource注解 @NullSource void nullSourceDemo(String param){ System.out.println(param); } }
6、null和empty都以作为参数进行传入
public class NullandEmptySourceDemoTest { // 1、声明是一个参数化 @ParameterizedTest // 2、使用NullAndEmptySource注解 @NullAndEmptySource void nullSourceDemo(String param){ System.out.println(param); } }
二、进行限制时间
public class TimeoutExampleTest { @Test //设定用例执行的超过时间,一旦超过x秒,则用例失败 @Timeout(7) // 不仅适用于Test,还适应于BeforeEach,AfterEach // 也可以设置时间粒度 void timeoutCaseOne() throws InterruptedException { System.out.println("第一条用例"); sleep(10000); } // 配置时间单位 @Test @Timeout(value = 3,unit = MILLISECONDS) // 时间粒度是毫秒 Second,Minute void timeoutCaseTwo(){ System.out.println("第二条用例"); } }
三、显示名称
@DisplayName("霍格沃兹测试") public class DisplayNameExampleTest { @Test // 定义一个显示名称 @DisplayName("霍格沃兹第一条测试") void hogwartsOne(){ System.out.println("第一条用例"); } }