做 Java 开发 3 年了, 每次想要测试开发完的接口总是有点头疼, 要复制 url, 又要写测试参数, 为了解决这些烦恼, 我开发了一个快速测试的工具, 直接面向 controller 测试. 项目地址 https://github.com/cweijan/http-test
example:
- 增加依赖
<dependency> <groupId>io.github.cweijan</groupId> <artifactId>http-test</artifactId> <version>0.0.3</version> <scope>test</scope> </dependency> - 假设有以下 controller, 启动 springboot 应用
@RestController @RequestMapping("/user") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @PostMapping("/save") public UserVo saveUser(@RequestBody SaveUserDTO saveuserDTO) { return userService.saveUser(saveuserDTO); } @PostMapping("/update") public UserVo updateUser(@RequestBody UpdateUserDTO updateuserDTO) { return userService.updateUser(updateuserDTO); } @GetMapping("/{userId}") public UserVO getUser(@PathVariable Integer userId) { return userService.getUser(userId); } @DeleteMapping("/{userId}") public void deleteByUserId(@PathVariable Integer userId) { userService.deleteByUserId(userId); } } - 创建测试用例, 开始测试
import io.github.cweijan.mock.Asserter; import io.github.cweijan.mock.jupiter.HttpTest; import io.github.cweijan.mock.request.Generator; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeAll; import javax.annotation.Resource; @HttpTest(host = "localhost",port = 8080) public class UserControllerTest { //仅支持注入 controller 和 feignClient @Resource private UserController userController; @BeforeAll public static void addToken(){ //配置全局拦截器 Mocker.addRequestInterceptor(template -> { template.header("token","c2f678d4873c472c8f99940e8cf39fe4"); }); } // 注意, 必须使用 junit5: org.junit.jupiter.api.Test @Test void saveUser() { //创建 mock 数据 SaveUserDTO saveUserDTO = Generator.request(SaveUserDTO.class); // 当调用方法时会直接发送 http 请求 UserVo userVo=userController.saveUser(saveUserDTO); UserVO user = userController.getUser(userVo.getId()); Asserter.assertSame(userVo,user); userController.deleteByUserId(userVo.getId()); } } SpringBootTest 也可以实现该测试, 但需要启动 spring 容器, 耗时实在太久, 该方式毫秒级即可运行完测试.
