使用 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"。
我正在为其中一个控制器方法编写一个 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"。