Spring Boo Test单元测试
一、依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
spring-boot-starter-test默认添加了以下依赖:
1.juint5.0(juint最新版本)
2.mockito,java mock框架,用于模拟任何spring管理的bean,如模拟servie接口返回都数据,模拟feign接口远程调用都结果,而不会真正地去调用。
3.assertj,断言框架,JUnit5中的断言内容位于org.junit.jupiter.api.Assertions类,Assertions.xxx各类断言,同时支持lambda表达式
4.JosnAssert、JosnPath等工具,用于json的断言判断,json值获取等。
二、Spring Boot Test常用注解
注解 | 作用 |
---|---|
@SpringbootTest | 指定测试类,默认提供Spring上下文环境。以往会在测试类加上@RunWith(SpringRunner.class),该注解是junit4 使用, 目的是将 Spring Boot和 Junit 的特性集成起来,juint5.0使用的是@ExtendWith({SpringExtension.class})来集成,而@SpringbootTest注解包含了@ExtendWith |
@ExtendWith | 注册扩展;如果只想简单的启用spring环境进行简单测试,不想启用springboot环境,可以扩展为@ExtendWith(SpringExtension.class),启动速度会快一些。 |
@Test | 指定方法为测试方法 |
@MockBean | 与@Mock注解作用类似(mockito框架自带),SpringBootTest框架在mockito框架基础上封装了@MockBean,将Mock的对象添加到Spring上下文中。 |
@DisplayName | 用于指定测试类和测试方法都别名,@DisplayName("xxx"),可用于生成报告输出想要的别名 |
@BeforeAll | juint4.0是用@BeforeClass,在测试类所有测试方法执行前执行一次,用于全局初始化 |
@AfterAll | juint4.0是用@AfterClass,在测试类所有测试方法执行后执行一次,用于销毁资源 |
@BeforeEach | juint4.0是用@Before,在测试类都每个测试方法执行前执行一次 |
@AfterEach | juint4.0是用@After,在测试类都每个测试方法执行后执行一次 |
@TestMethodOrder | 测试方法执行顺序策略,搭配@Order注解使用,@TestMethodOrder(MethodOrder.OrderAnnotation.class) |
@Order | 测试方法执行顺序,数字越低,执行顺序越高 |
@Disabled | juint4.0用都是@Ingore,用于禁用测试方法 |
@RepeatedTest | 指定测试方法重复执行次数 |
@AutoConfigureMockMvc | 启用mockMvc自动配置,可用于接口测试 |
三、实践
(1)基本上使用@SpringBootTest注解、@Resource / @Autowired注解、@MockBean即可
1.1使用@SpringBootTest在类上面加载Spring上下文环境.
1.2使用@Resource / @Autowired注解在类都属性上面,用于注入要测试的service类业务代码,不mock该实现层依赖都bean都话,默认会加载整个Spring上下文,会执行该bean调用的业务代码。
1.3@MockBean,于@Mock作用类似,@MockBean将Mock的对象添加到Spring上下文中,用于mock一些接口方法返回的内容,@MockBean注解mock的bean,如果没mock方法返回值(when xx then return xx),默认是返回null,mock了某个类到spring上下文,就不会执行该类的实际业务逻辑 。