4

我正在为具有以下方法签名的控制器方法之一编写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());

但问题是我无法在HttpServletRequest使用模拟 mvc 调用原始方法时设置参数。在没有设置HttpServletRequest参数的情况下,我的测试会出现问题,因为它是原始方法中需要和使用的东西。

请让我知道我应该如何设置。谢谢!

4

1 回答 1

4

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

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

例如,您使用

.contentType(MediaType.APPLICATION_JSON)

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

request.getHeader("content-type");

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

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

于 2015-11-18T01:37:40.900 回答