Spring MockMVC在不在方法签名中时注入mockHttpServletRequest
假设我继承了一些带有签名的SpringMVC控制器代码Spring MockMVC在不在方法签名中时注入mockHttpServletRequest,spring,spring-mvc,controller,mocking,integration-testing,Spring,Spring Mvc,Controller,Mocking,Integration Testing,假设我继承了一些带有签名的SpringMVC控制器代码 @RequestMapping(value = "/upload", method = RequestMethod.POST) public ModelAndView upload(HttpServletRequest request, HttpServletResponse response) { String remoteAddress = request.getRemotedAddr(); auditService.logA
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public ModelAndView upload(HttpServletRequest request, HttpServletResponse response) {
String remoteAddress = request.getRemotedAddr();
auditService.logAddress(remoteAddress);
// do work...
return mav;
}
我有一个SpringMockMVC测试来执行这个测试
public void someTest() {
mockMvc().perform(fileUpload("/upload").file(FileFactory.stringContent("myFile")));
// do work...
verify(auditService.logAddress("123456"));
}
我需要在传递到upload controller方法的HttpServletRequest对象上将远程地址设置为“12345”,以便在测试中验证对mockauditService的调用
我可以创建一个MockHttpServletRequest对象并调用setRemoteAddr()方法,但是如何将这个模拟请求对象传递给mockMvc()方法调用?您可以添加一个。然后可以使用with()
方法将其传递给mockmvc
mockMvc().perform(
fileUpload("/upload")
.file(FileFactory.stringContent("myFile"))
.with(new RequestPostProcessor() {
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
request.setRemoteAddr("12345");
return request;
}}));
这样的办法应该行得通 我试过了,但是request.getRemoteAddr()返回127.0.0.1,我认为这是默认行为:(如果调用了
setRemoteAddr
,则不会。因此,您的解决方案/setup/testcode肯定有问题……肯定可以工作。现在,您可以使用Java 8 lambda来完成此操作。