鉴于我已经继承了一些带有签名的
的Spring MVC控制器代码@RequestMapping(value = "/upload", method = RequestMethod.POST)
public ModelAndView upload(HttpServletRequest request, HttpServletResponse response) {
String remoteAddress = request.getRemotedAddr();
auditService.logAddress(remoteAddress);
// do work...
return mav;
}
我有一个执行测试的Spring MockMvc测试
public void someTest() {
mockMvc().perform(fileUpload("/upload").file(FileFactory.stringContent("myFile")));
// do work...
verify(auditService.logAddress("123456"));
}
我需要在传递到我的上传控制器方法的HttpServletRequest对象上将远程地址设置为“12345”,这样我就可以验证在测试中模拟 auditService 的调用。
我可以创建一个 MockHttpServletRequest 对象并调用 setRemoteAddr()方法,但是如何将这个模拟请求对象传递给mockMvc()方法调用?
答案 0 :(得分:22)
您可以添加RequestPostProcessor
。然后,您可以使用with()
方法将其传递给mockmvc。
mockMvc().perform(
fileUpload("/upload")
.file(FileFactory.stringContent("myFile"))
.with(new RequestPostProcessor() {
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
request.setRemoteAddr("12345");
return request;
}}));
这样的事情应该有用。