[英]Spring MockMvc Test : NullPointerException for mvc.perform()
[英]How to avoid NullPointerException in test used MockMvc?
我有控制器:
@Controller
public class EventMenuController{
@RequestMapping(value = "/updateEvent", method = RequestMethod.POST)
public String updateEvent(Model model,
@Valid @ModelAttribute("existedEvent") Event event,
BindingResult result,
@ModelAttribute("linkedCandidates") Set<Candidate> candidates,
@ModelAttribute("linkedvacancies") Set<Vacancy> vacancies,
@RequestParam(required = true, value = "selectedEventStatusId")Integer EventStatusId,
@RequestParam(required = true, value = "selectedEventTypeId")Integer EventTypeId ,
RedirectAttributes attributes) {
if (result.hasErrors()) {
//model.addAttribute("idEvent", event.getId());
event.setCandidates(candidates);
event.setVacancies(vacancies);
return "eventDetails";
}
eventService.updateEventAndLinkedEntities(event, candidates, vacancies ,EventTypeId,EventStatusId);
attributes.addAttribute("idEvent",event.getId() );//event is null therefore NPE here
attributes.addAttribute("message", "submitted correctly at "+new Date());
return "redirect:eventDetails";
}
}
為了測試此方法,我編寫了以下課程:
@ContextConfiguration(locations = { "classpath:/test/BeanConfigUI.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class EventMenuControllerTest {
@Test
public void updateEvent() throws Exception{
MockHttpServletRequestBuilder request = MockMvcRequestBuilders
.post("/updateEvent");
request.param("selectedEventStatusId", "1");
request.param("selectedEventTypeId", "1");
EventMenuController eventMenuController = (EventMenuController) wac.getBean("eventMenuController");
EventService mockEventService = Mockito.mock(EventService.class);
eventMenuController.eventService = mockEventService;
Mockito.doNothing().when(mockEventService).updateEventAndLinkedEntities(any(Event.class), any(Set.class),any(Set.class), any(Integer.class), any(Integer.class));
ResultActions result = mockMvc.perform(request);
result.andExpect(MockMvcResultMatchers.view().name("redirect:eventDetails"));
result.andExpect(MockMvcResultMatchers.model().attributeExists("idEvent"));
result.andExpect(MockMvcResultMatchers.model().attributeExists("message"));
}
}
在服務器端執行的流程請求中,我看到錯誤,向我顯示事件對象為null。
題:
我必須使用MockMvc將通過事件寫入服務器端(控制器方法)的什么請求?
Event
類對象未初始化。 您可以創建一個Event
對象或創建的模擬Event
取決於你的測試用例對象,並將其發送給EventMenuController
類對象。 您可以執行類似於將EventService
的模擬對象發送到EventMenuController
。
更好的做法是將字段用作類的一部分,而不是方法的一部分。 這將使您可以靈活地模擬任何字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.