我正在使用方法签名为其中一个控制器方法编写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
参数,我的测试会给出问题,因为它是必需的并且在原始方法中使用。
请告诉我如何设置相同的内容。谢谢!
答案 0 :(得分:4)
我们的想法是你不应该这样做。
MockMvcRequestBuilders#post(..)
返回MockHttpServletRequestBuilder
,可让您使用所需的任何值构建请求。这些将在HttpServletRequest
中镜像,并传递给您的处理程序方法。
例如,您使用了
.contentType(MediaType.APPLICATION_JSON)
这将设置请求的content-type
标头。在你的处理程序方法中,如果你做了
request.getHeader("content-type");
您为String
取回了相应的MediaType.APPLICATION_JSON
。
MockHttpServletRequestBuilder
有" setter"对于请求的每个部分。