我有一个控制器方法。
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String uploadFiles(@RequestBody MyModel myModel) {...}
我必须从JUNIT测试用例中调用它。
到目前为止,我尝试了不同的方式,其中一些是在下面,它给了我
java.lang.AssertionError: Status expected:<200> but was:<415>
MvcResult result;
result = getMockMvc().perform(post("/fileUpload"))
.andExpect(status().isOk())
.andReturn();
和
result = getMockMvc().perform(post("/fileUpload").accept(APPLICATION_JSON_CHARSET_UTF_8))
.andExpect(status().isOk())
.andReturn();
我无法在RequestHeader,RequestParam或PathVariable中传递我的参数。
答案 0 :(得分:2)
你可以试试这个:
MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(url).contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON).content(jsonContent)).andReturn();
其中url =“/ fileUpload”和jsonContent是您在String类型中请求的json内容。
答案 1 :(得分:1)
HTTP状态415表示不支持的媒体类型,这意味着控制器没有接收到它所期望的请求媒体类型。
如果您在JUnit测试用例中设置了accept(APPLICATION_JSON_CHARSET_UTF_8)
,那么您的控制器也应该consumes = MediaType.APPLICATION_JSON_UTF8_VALUE
作为其@RequestMapping
注释的一部分。
编辑:如果您只是专门询问如何在junit测试中附加请求正文,则可以添加:
result = getMockMvc().perform(post("/fileUpload"))
.content("payload string")
.contentType("application/json; charset=utf-8")
.accept(MediaType.APPLICATION_JSON_UTF8_VALUE)
.andExpect(status().isOk())
.andReturn();