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

k_b*_*k_b 5 spring-mvc junit4 mockmvc

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

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

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

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

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

请让我知道我应该如何设置相同的内容。谢谢!

Sot*_*lis 4

这个想法是你不应该需要。

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

例如,您使用了

.contentType(MediaType.APPLICATION_JSON)
Run Code Online (Sandbox Code Playgroud)

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

request.getHeader("content-type");
Run Code Online (Sandbox Code Playgroud)

你会得到一个对应StringMediaType.APPLICATION_JSON.

MockHttpServletRequestBuilder请求的每个部分都有“设置器” 。