mam następujący prosty kontroler złapać jakieś nieoczekiwane wyjątki:Metoda badawcza Wiosna MVC @ExceptionHandler z wiosennym MVC test
@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);
}
}
Próbuję napisać test integracyjny przy użyciu Spring Framework MVC Test. To, co mam tak daleko:
@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"));
}
}
I zarejestrować ExceptionController i makiety StatusController w infrastrukturze wiosny MVC. W metodzie testowej ustawiłem oczekiwanie na zgłoszenie wyjątku z kontrolera StatusController.
Wyjątek jest zgłaszany, ale narzędzie ExceptionController go nie obsługuje.
Chcę móc przetestować wyjątek ExceptionController i zwrócić odpowiednią odpowiedź.
Jakieś przemyślenia na temat tego, dlaczego to nie działa i jak powinienem wykonać ten rodzaj testu?
Dzięki.
Domyślam się, że w procedurach obsługi wyjątków procedury obsługi nie zostały przypisane, nie wiem dlaczego, ale właśnie dlatego tak się dzieje, spójrz na tę odpowiedź http: // stackoverflow. com/questions/11649036/exceptionhandler-not-working-with-spring-mvc-3-1-unit-test – engma
Jakieś wieści na ten temat? Jestem w tej samej sytuacji. – Cemo
Nie znalazłem rozwiązania. Zdecydowałem, że zaufam, że @ExceptionHandler działa, a ponieważ sama metoda jest prosta, zdecydowałem, że mogę żyć bez testowania tej adnotacji. Nadal możesz testować metodę za pomocą zwykłego testu jednostkowego. – C0deAttack