Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring MockMVC在不在方法签名中时注入mockHttpServletRequest_Spring_Spring Mvc_Controller_Mocking_Integration Testing - Fatal编程技术网

Spring MockMVC在不在方法签名中时注入mockHttpServletRequest

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

假设我继承了一些带有签名的SpringMVC控制器代码

@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来完成此操作。