Używam MockMVC do testowania kontrolera.Jak traktować wyjątek kontrolera z mockmvc
Mam następujący Kontroler:
public class A{
...
@RequestMapping("/get")
public List<ADTO> get(@RequestParam(defaultValue = "15", required = false) Integer limit) throws IOException {
if(limit <= 0 || limit >= 50){
throw new IllegalArgumentException();
}
...
return aDTOs;
}
}
A mój prąd testowy wygląda następująco:
@Test
public void testGetAllLimit0() throws Exception {
mockMvc.perform(get("/A/get")
.param("limit","0")
)
.andDo(print())
.andExpect(...);
}
ja każdy węzeł MockMVC z tym:
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
Jak mogę wziąć opiekę nad tym wyjątkiem wyrzuconym w moim kontrolerze?
Później Edit:
Nie jestem pewien, co się stało w moim kodu niedawno ale to przechodzi test:
@Test
public void testGetAllLimit0() throws Exception {
mockMvc.perform(get("/A/get")
.param("limit","0")
)
.andDo(print())
.andExpect(status().is(500));
}
To wciąż przechodzi gdybym zastąpić is(500)
z isOk()
. A to nie jest dobre, powinienem jakoś sprawdzić ten wyjątek.
Gdybym uruchomić gradle build
uzyskać to:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException
Jakiego rodzaju odpowiedzi HTTP oczekujesz, gdy kontroler zgłasza taki wyjątek? Spodziewałbym się błędu 500. Jeśli tego właśnie oczekujesz, to właśnie to powinno sprawdzić twój test. Jeśli spodziewasz się kolejnego błędu (bardziej odpowiedni byłby błąd 400), przetestuj, czy wystąpił taki błąd w teście, i napraw kod, aż test przejdzie. –
Próbowałem już oczekiwać błędu 500, ale nie działa, ponieważ zatrzymuje wykonanie, gdy błąd jest zgłaszany. – tzortzik
Zaktualizowałem swój pierwszy wpis. Działo się coś dziwnego. – tzortzik