引言
本文将讨论如何针对 Spring Boot 程序的 Web 层进行测试的,借助 MockMvc API 以及常见的测试库实现 Web 层方法的测试覆盖,以及如何定制 MockMvc。
准备工作
- Java 8
- Maven 3
- Spring Boot 2.x.x
新建一个 Spring Boot 工程,并且保证项目有以下Maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
配置 MockMvc
首先,创建对应的 Controller 类的单元测试类,使用 @SpringBootTest
注解标记测试类,来指明是一个基于 Spring Boot 的单元测试类,运行测试类时,框架会创建一个应用上下文,程序中所有配置过的 Bean 都会被创建到这个应用上下文中,比如 Controller 类所依赖的一些 Service 组件或者配置组件。接着使用 @AutoConfigureMockMvc
注解自动装配在 Web 层测试发挥关键作用的 MockMvc 对象,我们编写的控制器方法就是通过 MockMvc 实现测试调用的。
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest {
@Autowired
private MockMvc mockMvc;
//....
}
另外,编写测试方法前,官方建议先静态导入下面这些类,用于编写简洁的步骤方法和验证方法。
import static org.springframew