使用 MvcMock 将 HttpServletRequest 设置为测试方法参数

Setting HttpServletRequest as a testing method argument using MvcMock

我正在为其中一个控制器方法编写一个 junit,其方法签名如下:

@RequestMapping(value="/getTokenizedURL.json",method=RequestMethod.POST)
@ResponseBody
public ResponseData getTokenizedURL(@RequestBody final RequestData requestData, final HttpServletRequest request) throws CustomException

我需要使用 MockMvc 调用此方法,我可以使用以下方法调用:

mockMvc.perform(post("/user/getTokenizedURL.json")
    .contentType(MediaType.APPLICATION_JSON)
    .content(json))
    .andDo(print())
    .andExpect(status().isOk());

但问题是我在使用 mock mvc 调用原始方法时无法设置 HttpServletRequest 参数。如果不设置 HttpServletRequest 参数,我的测试会出现问题,因为它是原始方法中需要和使用的东西。

请告诉我应该如何设置。谢谢!

我们的想法是您不需要这样做。

MockMvcRequestBuilders#post(..) returns a MockHttpServletRequestBuilder 允许您使用任何您想要的值构造请求。这些将反映在传递给您的处理程序方法的 HttpServletRequest 中。

例如,您使用了

.contentType(MediaType.APPLICATION_JSON)

这将设置请求的 content-type header。在您的处理程序方法中,如果您这样做了

request.getHeader("content-type");

你会得到 MediaType.APPLICATION_JSON 对应的 String

MockHttpServletRequestBuilder 请求的每个部分都有 "setters"。