SuperAPI AI 工具集

unit-test-exception-handler

测试与质量

查看项目

更新于 10-16 08:48

技能介绍

用途:为 Spring Boot 的异常处理编写单元测试,覆盖 @ControllerAdvice 中的 @ExceptionHandler 方法,验证 REST API 的错误响应格式、HTTP 状态码与字段级校验错误。

主要能力:用 MockMvc 断言状态码与 JSON 字段;测试全局异常处理;验证 MethodArgumentNotValidException 产生的字段级信息;mock 处理器的外部依赖。

使用方式:创建抛出特定异常的测试控制器触发对应 @ExceptionHandler;通过 MockMvcBuilders.standaloneSetup() 的 setControllerAdvice() 注册控制器通知;用 status().isXxx() 断言状态码,jsonPath("$.field") 校验响应字段;发送非法载荷检查校验错误;用 .andDo(print()) 调试失败。

示例结构(节选): @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(ResourceNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) public ErrorResponse handleNotFound(...);@ExceptionHandler(MethodArgumentNotValidException.class) 返回 ValidationErrorResponse。} 测试:mockMvc = MockMvcBuilders.standaloneSetup(new TestController()).setControllerAdvice(handler).build(); mockMvc.perform(get("/api/users/999")).andExpect(status().isNotFound()).andExpect(jsonPath("$.status").value(404));校验失败用例发送 {"name":"","email":"invalid"},断言 jsonPath("$.errors.name") 与 ".errors.email"。

适用场景:REST API 错误响应契约测试、异常处理隔离测试、字段校验信息验证。

限制与注意:处理器未被调用需确认已调用 setControllerAdvice();状态为 200 通常是缺少 @ResponseStatus;更具体的异常类型优先匹配,Exception.class 兜底;@ControllerAdvice 中为全局,控制器内为局部;使用 MessageSource 时需测试不同 Locale;记录日志的处理器可用 verify(mockLogger) 验证。其余细节资料未提供。