2013-08-09 19 views
9

Mam następujący kodWiosna MVC Controller Wyjątek test

@RequestMapping(value = "admin/category/edit/{id}",method = RequestMethod.GET) 
public String editForm(Model model,@PathVariable Long id) throws NotFoundException{ 
    Category category=categoryService.findOne(id); 
    if(category==null){ 
     throw new NotFoundException(); 
    } 

    model.addAttribute("category", category); 
    return "edit"; 
} 

Próbuję badanej jednostki po NotFoundException jest wyrzucane, więc napisać kod jak ten

@Test(expected = NotFoundException.class) 
public void editFormNotFoundTest() throws Exception{ 

    Mockito.when(categoryService.findOne(1L)).thenReturn(null); 
    mockMvc.perform(get("/admin/category/edit/{id}",1L)); 
} 

ale bezskutecznie. Wszelkie sugestie dotyczące testowania wyjątku?

Albo powinienem rzucić wyjątek wewnątrz CategoryService więc mogę zrobić coś takiego

Mockito.when(categoryService.findOne(1L)).thenThrow(new NotFoundException("Message")); 

Odpowiedz

12

końcu rozwiązany. Ponieważ używam konfiguracji samodzielnej dla testu kontrolera sprężyny mvc, więc muszę utworzyć HandlerExceptionResolver w każdym teście jednostki kontrolera, który musi przeprowadzić sprawdzanie wyjątków.

mockMvc= MockMvcBuilders.standaloneSetup(adminCategoryController).setSingleView(view) 
      .setValidator(validator()).setViewResolvers(viewResolver()) 
      .setHandlerExceptionResolvers(getSimpleMappingExceptionResolver()).build(); 

Następnie kod do testowania

@Test 
public void editFormNotFoundTest() throws Exception{ 

    Mockito.when(categoryService.findOne(1L)).thenReturn(null); 
    mockMvc.perform(get("/admin/category/edit/{id}",1L)) 
      .andExpect(view().name("404s")) 
      .andExpect(forwardedUrl("/WEB-INF/jsp/404s.jsp")); 
} 
+6

co jest() realizacja getSimpleMappingExceptionResolver? –

+2

Dowiedziałem się: http://www.mytechnotes.biz/2012/11/spring-mvc-error-handling.html. Wygląda na to, że org.springframework.web.servlet.handler.SimpleMappingExceptionResolver jest już klasą wiosenną – josete