16

鉴于我继承了一些带有签名的 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() 方法调用呢?

4

1 回答 1

29

您可以添加一个RequestPostProcessor. with()然后您可以使用该方法将其传递给 mockmvc 的东西。

mockMvc().perform(
  fileUpload("/upload")
  .file(FileFactory.stringContent("myFile"))
  .with(new RequestPostProcessor() { 
    public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
       request.setRemoteAddr("12345"); 
       return request;
    }}));

像这样的东西应该工作。

于 2013-08-28T12:30:10.163 回答