我正在使用spring jun mvc的junit测试用例。但每次我收到错误说
java.lang.AssertionError:未设置内容类型
@Test
public void testAddNewPermission() throws Exception {
String response = "{" + "\"response\":{"
+ "\"message\": \"Addded new permission\","
+ "\"status\": \"success\"}" + "}";
when(userManagementHelper.addNewPermission("user", "NodeManagemnt"))
.thenReturn(
new ResponseEntity<String>(response, new HttpHeaders(),
HttpStatus.OK));
mockMvc.perform(
post("/usermgmt/addNewPermission").param("username", "user")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(
content().contentType(MediaType.APPLICATION_JSON_VALUE))
.andExpect(jsonPath("$.response.['status']", is("success")));
}
请帮忙解决。
添加控制器代码。
@RequestMapping(value = "/addNewPermission", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody
ResponseEntity<String> addNewPermission(
@RequestParam("username") String userName, String permissionName) {
return userManagementHepler.addNewPermission(userName, permissionName);
}
答案 0 :(得分:2)
这里编写控制器代码的方式有一些问题,修复这些代码应该可以使代码工作:
0.1。您在此处明确返回ResponseEntity
,这意味着您无需使用@ResponseBody
注释您的回复。 ResponseEntity
已经封装了这种行为。
0.2。你的方法不是接受JSON,它只是接受一个Form帖子,但你说的是Content-Type是json,它不是。由于您期望得到json的响应,因此您应该将Accept
标头设置为json,并完全删除Content-Type
。
我认为更改这些应该可以解决您的问题。