Sto usando MockMVC per testare il mio controller.come trattare l'eccezione del controller con mockmvc
Ho il seguente comando:
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;
}
}
E il mio test in corso si presenta così:
@Test
public void testGetAllLimit0() throws Exception {
mockMvc.perform(get("/A/get")
.param("limit","0")
)
.andDo(print())
.andExpect(...);
}
sto un'istanza di MockMVC con questo:
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
Come posso prendere cura di quell'eccezione gettata nel mio controller?
tardi Edit:
Non sono sicuro di quello che è successo nel mio codice di recente ma passa il test:
@Test
public void testGetAllLimit0() throws Exception {
mockMvc.perform(get("/A/get")
.param("limit","0")
)
.andDo(print())
.andExpect(status().is(500));
}
Si passa ancora se sostituisco is(500)
con isOk()
. E questo non va bene, dovrei controllare in qualche modo per quell'eccezione.
Se corro un gradle build
ottengo questo:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException
Che tipo di risposta HTTP si prevede di ottenere quando un controller genera un'eccezione del genere? Mi aspetterei un errore 500. Se è quello che ti aspetti, è quello che il tuo test dovrebbe verificare. Se si prevede un altro errore (un errore 400 sarebbe più appropriato), quindi verificare che si ottenga un tale errore nel test e correggere il codice fino a quando il test non supera. –
Ho già provato a prevedere l'errore 500 ma non funziona perché interrompe l'esecuzione quando viene generato l'errore. – tzortzik
Ho aggiornato il mio post iniziale. È successo qualcosa di strano – tzortzik