10

我有一个控制器方法,我必须为此编写一个 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());
}

使用 spring mockMVC 进行 Junit 测试

@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 框架设置该值

4

2 回答 2

1

作为一个简单的解决方法,您应该MockHttpServletRequestBuilder.flashAttr()在测试中使用:

@Test
public void getNewView() throws Exception {
    Client client = new Client(); // or use a mock
    this.mockMvc.perform(get("/new").flashAttr("currentClient", client))
        .andExpect(status().isOk())
        .andExpect(model().attributeExists("employeeForm"))
        .andExpect(view().name("/new"));
}
于 2021-04-21T16:56:14.060 回答
0

响应以字符串链的形式给出(我猜是 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")

希望能帮助到你...

于 2017-09-05T12:43:31.240 回答