1. 概要
软件测试是一个应用软件质量的保证。java开发者开发接口往往忽视接口单元测试。作为java开发如果会Mock单元测试,那么你的bug量将会大大降低。spring提供test测试模块,所以现在来玩下springboot下的Mock单元测试,我们将对controller,service 的单元测试进行实战操作。
2. 依赖引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
按照上面引入依赖而且scope为test。该依赖提供了一下类库
- JUnit 4: 目前最强大的java应用单元测试框架
- Spring Test & Spring Boot Test: Spring Boot 集成测试支持.
- AssertJ: 一个java断言库,提供测试断言支持.
- Hamcrest: 对象匹配断言和约束组件.
- Mockito: 知名 Java mock 模拟框架.
- JSONassert: JSON断言库.
- JsonPath: JSON XPath 操作类库.
以上都是在单元测试中经常接触的类库。有时间你最好研究一下。
3. 配置测试环境
一个Spring Boot 应用程序是一个Spring ApplicationContext
,一般测试不会超出这个范围。
测试框架提供一个@SpringBootTest
注解来提供SpringBoot单元测试环境支持。你使用的JUnit版本如果是JUnit 4
不要忘记在测试类上添加@RunWith(SpringRunner.class)
,JUnit 5
就不需要了。默认情况下,@SpringBootTest不会启动服务器。您可以使用其 webEnvironment
属性进一步优化测试的运行方式,webEnvironment
相关讲解:
MOCK
(默认):加载Web ApplicationContext并提供模拟Web环境。该选择下不会启动嵌入式服务器。如果类路径上没有Web环境,将创建常规非Web的ApplicationContext
。你可以配合@AutoConfigureMockMvc
或@AutoConfigureWebTestClient
模拟的Web应用程序。RANDOM_PORT
:加载WebServerApplicationContext
并提供真实的Web环境&#