2013-08-09 23 views
9

Ich habe den folgenden CodeSpring MVC-Controller Exception-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"; 
} 

ich Unit-Test bin versucht, wenn NotFoundException geworfen wird, so dass ich schreiben Code wie dieser

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

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

aber gescheitert. Haben Sie Vorschläge, wie Sie die Ausnahme testen können?

Oder sollte ich werfe die Ausnahme innerhalb CategoryService, so kann ich so etwas wie dies tun

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

Antwort

12

Endlich ist es ich gelöst. Da ich Stand-alone-Setup für Frühjahr mvc Controller-Test verwenden, so muss ich HandlerExceptionResolver in jedem Controller Unit-Test erstellen, die Ausnahmeprüfung durchführen muss.

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

der Code Dann

zu testen
@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

was die getSimpleMappingExceptionResolver() -Implementierung ist? –

+2

Ich habe das herausgefunden: http://www.mytechnotes.biz/2012/11/spring-mvc-error-handling.html. Sieht aus wie org.springframework.web.servlet.handler.SimpleMappingExceptionResolver ist bereits eine Spring-Klasse – josete