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")

Надеюсь, что это поможет...