Исключительный тест контроллера MVC Spring

У меня есть следующий код

@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";
}

Я пытаюсь выполнить модульное тестирование, когда генерируется NotFoundException, поэтому я пишу такой код

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

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

Но не удалось. Любые предложения, как проверить исключение?

Или я должен выбросить исключение внутри CategoryService, чтобы я мог сделать что-то вроде этого

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

1 ответ

Наконец я решил это. Так как я использую автономную настройку для теста контроллера Spring MVC, мне нужно создавать HandlerExceptionResolver в каждом тесте контроллера, который должен выполнять проверку исключений.

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

Тогда код для тестирования

@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"));
}
Другие вопросы по тегам