6. 在上述替换方式的基础上,JUnit5还提供了另一种生成展示名称的方法:测试类名+连接符+测试方法名,并且类名和方法名的下划线都会被替换成空格,演示代码如下,使用了注解@IndicativeSentencesGeneration,其separator属性就是类名和方法名之间的连接符: package com.bolingcavalry.advanced.service.impl; import org.junit.jupiter.api.DisplayNameGenerator; import org.junit.jupiter.api.IndicativeSentencesGeneration; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest @IndicativeSentencesGeneration(separator = ",测试方法:", generator = DisplayNameGenerator.ReplaceUnderscores.class) public class IndicativeSentences_Test { @Test void if_it_is_one_of_the_following_years() { } }
执行结果如下:
重复测试(Repeated Tests)重复测试就是指定某个测试方法反复执行多次,演示代码如下,可见@Test已被@RepeatedTest(5)取代,数字5表示重复执行5次:
@Order(1) @DisplayName("重复测试") @RepeatedTest(5) void repeatTest(TestInfo testInfo) { log.info("测试方法 [{}]", testInfo.getTestMethod().get().getName()); }执行结果如下图:
3. 在测试方法执行时,如果想了解当前是第几次执行,以及总共有多少次,只要给测试方法增加RepetitionInfo类型的入参即可,演示代码如下,可见RepetitionInfo提供的API可以得到总数和当前次数: @Order(2) @DisplayName("重复测试,从入参获取执行情况") @RepeatedTest(5) void repeatWithParamTest(TestInfo testInfo, RepetitionInfo repetitionInfo) { log.info("测试方法 [{}],当前第[{}]次,共[{}]次", testInfo.getTestMethod().get().getName(), repetitionInfo.getCurrentRepetition(), repetitionInfo.getTotalRepetitions()); }
上述代码执行结果如下:
5. 在上图的左下角可见,重复执行的结果被展示为"repetition X of X"这样的内容,其实这部分信息是可以定制的,就是RepeatedTest注解的name属性,演示代码如下,可见currentRepetition和totalRepetitions是占位符,在真正展示的时候会被分别替换成当前值和总次数: @Order(3) @DisplayName("重复测试,使用定制名称") @RepeatedTest(value = 5,) void repeatWithCustomDisplayNameTest(TestInfo testInfo, RepetitionInfo repetitionInfo) { log.info("测试方法 [{}],当前第[{}]次,共[{}]次", testInfo.getTestMethod().get().getName(), repetitionInfo.getCurrentRepetition(), repetitionInfo.getTotalRepetitions()); }
上述代码执行结果如下:
嵌套测试(Nested Tests)如果一个测试类中有很多测试方法(如增删改查,每种操作都有多个测试方法),那么不论是管理还是结果展现都会显得比较复杂,此时嵌套测试(Nested Tests)就派上用场了;
嵌套测试(Nested Tests)功能就是在测试类中创建一些内部类,以增删改查为例,将所有测试查找的方法放入一个内部类,将所有测试删除的方法放入另一个内部类,再给每个内部类增加@Nested注解,这样就会以内部类为单位执行测试和展现结果,如下图所示: