Spring Тестирование MockMvc для атрибута модели
У меня есть метод контроллера, для которого я должен написать тест junit
@RequestMapping(value = "/new", method = RequestMethod.GET)
public ModelAndView getNewView(Model model) {
EmployeeForm form = new EmployeeForm()
Client client = (Client) model.asMap().get("currentClient");
form.setClientId(client.getId());
model.addAttribute("employeeForm", form);
return new ModelAndView(CREATE_VIEW, model.asMap());
}
Тест Junit с использованием spring mockMVC
@Test
public void getNewView() throws Exception {
this.mockMvc.perform(get("/new")).andExpect(status().isOk()).andExpect(model().attributeExists("employeeForm")
.andExpect(view().name("/new"));
}
Я получаю NullPointerException как model.asMap(). get ( "currentClient" ); возвращает значение null при запуске теста, как установить это значение с помощью spring mockmvc framework
Ответы
Ответ 1
Ответ задается как цепочка строк (я думаю, формат json, так как это обычный ответ службы поддержки), и таким образом вы можете получить доступ к строке ответа через результирующий ответ таким образом:
ResultActions result = mockMvc.perform(get("/new"));
MvcResult mvcResult = result.andExpect(status().isOk()).andReturn();
String jsonResponse = mvcResult.getResponse().getContentAsString();
И затем вы можете получить доступ к ответу через getResponse(). getContentAsString(). Если json/xml, снова проанализируйте его как объект и проверьте результаты. Следующий код просто гарантирует, что json содержит цепочку цепочек "employeeForm" (используя asertJ - что я рекомендую)
assertThat(mvcResult.getResponse().getContentAsString()).contains("employeeForm")
Надеюсь, что это поможет...