Как использовать MockMvc с макетом контроллера

У меня есть этот метод contoller:

@RequestMapping(value = "/addEvent", method = RequestMethod.POST)
 public String addEvent(Model model,
 @Valid @ModelAttribute("myEvent") Event event,
 BindingResult result, RedirectAttributes redirectAttributes,
 @RequestParam(required = true) Integer selectedEventTypeId,
 @RequestParam(required = true) Integer selectedEventStatusId) {

 if (result.getErrorCount() > 1 ){
 return "eventDetailsAdd";
 }
 eventService.addEvent(event, selectedEventTypeId, selectedEventStatusId);
 redirectAttributes.addAttribute("idEvent", event.getId());
 redirectAttributes.addAttribute("message", "added correctly at " + new Date() );
 return "redirect:eventDetails";
 }

Используя mockMvc, я хочу высмеять результат и проверить оба varians if (result.getErrorCount() > 1 )

Как я могу это сделать?

1 ответ

С MockMvc вы не можете. MockMvc - это тип HTTP-клиента. Вы генерируете свой HTTP-запрос с помощью MockMvcRequestBuilders, настраиваете свои заголовки, параметры запроса, тело и URL. MockMvc будет высмеивать отправку запроса, интегрирующего полный стек DispatcherServlet.

Если вы хотите издеваться BindingResult аргументом BindingResult, я предлагаю вам самостоятельно протестировать ваш класс @Controller.

// in @Test
MyController controller = new MyController(/* maybe other arguments */)
// generate your mocks and declare expectations
controller.addEvent(/* mocks go here */);
// verify your mocks

licensed under cc by-sa 3.0 with attribution.