我需要在spring控制器的请求处理程序中模拟@ModelAttribute
。我希望通过mock传递不同的值,而不是通过MockMVC请求参数传递它。有一个请求拦截器工作,甚至可能是nullyfying甚至模型对象属性是通过请求参数设置的,因此这个问题。
以下是部分代码段; Componet1:要模拟其请求处理程序的@ModelAtrribute的控制器。
@Controller public class MyController { / **这里有一些代码* /
@RequestMapping(path = "/myRequest", method = RequestMethod.POST)
@ResponseBody
public String requestHanderForMyRequest(HttpServletRequest request, @ModelAttribute(name="myBean") People person) {
...
Date birthDate = person.getBirthDate();
...
// do something with date
/** prepare JSON response and return */
return "{ ...}";
}
}
组件2:DateFieldInterceptor.java 截取请求中的日期字段并对其进行处理,然后在成功流程重置为null时更新它。
组件3:JUnit测试类中的模拟测试方法
@Test
public void testRequestHanderForMyRequest() {
try {
ResponseInstance responseInstance = testUtility .loadResponseFromFile("testFile.json");
Assert.assertNotNull("No base data", responseInstance);
MvcResult resultantMvc = mockMvc.perform(post("/myRequest")
.session(mockHttpSession)
.param(START_DATE, START_DATE_VALUE)
.param("birthdate", BIRTH_DATE_VALUE)
.param("personName", "dfs edfsd")
)
.andExpect(status().isOk())
.andExpect(jsonPath("$").exists())
.andExpect(jsonPath("$").isNotEmpty())
.andExpect(jsonPath("$", Matchers.hasKey(PAYLOAD)))
.andExpect(jsonPath("$.*", Matchers.hasSize(1)))
.andExpect(jsonPath(JSON_PATH_ROOT_PAYLOAD).isArray())
.andExpect(jsonPath(JSON_PATH_ROOT_PAYLOAD).isNotEmpty())
.andReturn();
Assert.assertNotNull(MVC_RESULT_IS_MISSING_FOR_THE_REQUEST, resultantMvc);
String payloadData = resultantMvc.getResponse().getContentAsString();
Assert.assertTrue(RESPONSE_IS_MISSING_PAYLOAD_DATA, StringUtils.isNotBlank(payloadData));
} catch (Exception e) {
Assert.fail(e.getMessage());
}
}
日期拦截器以某种方式进入负流并将日期字段重置为null。 我希望单元测试People实例的birthdate字段。 如果我能以某种方式模拟person.getBirthDate()那么我应该对单元测试没问题。 但是模拟似乎不适用于@ModelAttribute参数。