我有以下简单的控制器来捕捉任何意外的异常:
@ControllerAdvice
public class ExceptionController {
@ExceptionHandler(Throwable.class)
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public ResponseEntity handleException(Throwable ex) {
return ResponseEntityFactory.internalServerErrorResponse("Unexpected error has occurred.", ex);
}
}
我正在尝试使用 Spring MVC Test 框架编写一个集成测试:
@RunWith(MockitoJUnitRunner.class)
public class ExceptionControllerTest {
private MockMvc mockMvc;
@Mock
private StatusController statusController;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.standaloneSetup(new ExceptionController(), statusController).build();
}
@Test
public void checkUnexpectedExceptionsAreCaughtAndStatusCode500IsReturnedInResponse() throws Exception {
when(statusController.checkHealth()).thenThrow(new RuntimeException("Unexpected Exception"));
mockMvc.perform(get("/api/status"))
.andDo(print())
.andExpect(status().isInternalServerError())
.andExpect(jsonPath("$.error").value("Unexpected Exception"));
}
}
我在 Spring MVC 基础结构中注册了 ExceptionController 和一个模拟 StatusController。 在测试方法中,我设置了一个期望值来从 StatusController 抛出一个异常。
正在引发异常,但 ExceptionController 没有处理该异常。
我希望能够测试 ExceptionController 获得异常并返回适当的响应。
有什么想法吗,为什么这个不起作用,我应该如何做这种测试?
谢谢。