springboot2.2之后引入的测试默认都是junit5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
以前@SpringBootTest+@RunWith(xxx.class)
现在只需要@SpringBootTest
作用是拿到spring容器的组件,也就是不加这个注解不能用@Autowired引入实例
springboot2.4以上移除了vintage,如果需要兼容junit4需要自行引入。
import org.junit.jupiter.api.Test; 的@Test是junit5版本的
junit5里的常用注解
@Transactional标注表示该单元测试完毕后会自动回滚
@DisplayName("")给测试方法取名
@BeforeEach该注解标注的方法要在每个单元测试执行之前执行
@AfterEach该注解标注的方法要在每个单元测试执行之后执行
@BeforeAll在所有单元测试之前执行一次,通常为静态方法static
@AfterAll在所有单元测试之后执行一次,通常为静态方法static
@Disabled表示当前方法在测试的时候不被执行
@Timeout(value = 5,unit = TimeUnit.MINUTES)某个方法执行超过指定时长会报错抛出超时异常
@RepeatedTest(5)重复测试多少次
断言
1.简单断言
这些基本上都是静态方法,在Assertions包下
前面断言失败后面代码不会执行
2.数组断言
3.组合断言
全部断言成功才成功
4. 异常断言
出现异常断言才会成功,测试就没有异常。但是没出现期望异常,断言就失败了,就会抛出断言的异常。
5. 超时断言
业务逻辑一定在指定时间未完成
6.快速失败
fail(“失败”)
前置条件
未满足断言会使测试方法失败,而前置条件只会停止执行而不汇报测试失败
嵌套测试@Nested
外层的test不能驱动内层的before after
参数化测试
参数化测试需要引入额外的jar包
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>