2015-04-12 18 views
7

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 
+0

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. –

+0

Próbowałem już oczekiwać błędu 500, ale nie działa, ponieważ zatrzymuje wykonanie, gdy błąd jest zgłaszany. – tzortzik

+0

Zaktualizowałem swój pierwszy wpis. Działo się coś dziwnego. – tzortzik

Odpowiedz