一、前言
1、遇到的问题:
为确保功能稳定在线上运行,功能上线前必须要进行覆盖性单元测试,但由于接口测试需要通过PostMan或者Swagger进行调用,才能进行集成测试。而且通过PostMan或者Swagger进行测试后,测试用例无法进行保存,进而无法确保测试用例是否全面覆盖,而且测试用例无法留存。
2、解决方案:
通过SpringBootTest注入Mock的方式,来进行接口调用单元测试。
二、功能代码
@RestController("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list")
public ResponseEntity<List<User>> list() {
return new ResponseEntity(list, HttpStatus.OK);
}
/**
* user中存放筛选过滤条件
*/
@PostMapping("/list2")
public ResponseEntity<List<User>> list(User user,
@RequestParam(name = "current", defaultValue = "1") Integer current,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
return new ResponseEntity(list, HttpStatus.OK);
}
@PostMapping("/add")
public ResponseEntity<String> add(@RequestBody User user){
userService.add(user);
return new ResponseEntity("成功", HttpStatus.OK);
}
}
三、集成Mock
1、导入SpringBoot的测试依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
2、创建一个测试用例
(1)@RunWith和@SpringBootTest:表示是一个可以启动容器的测试类。
(2)@WebAppConfiguration:表示测试环境使用的ApplicationContext将是WebApplicationContext类型的。
(3)@AutoConfigureMockMvc:表示是一个可以通过Mock方式进行单元测试的类。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@WebAppConfiguration
// @AutoConfigureMockMvc是用于自动配置MockMvc