spring mvc Junit使用mockito进行post方法

时间:2014-05-11 10:28:14

标签: java spring spring-mvc junit mockito

我正在使用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);
    }

1 个答案:

答案 0 :(得分:2)

这里编写控制器代码的方式有一些问题,修复这些代码应该可以使代码工作:

0.1。您在此处明确返回ResponseEntity,这意味着您无需使用@ResponseBody注释您的回复。 ResponseEntity已经封装了这种行为。

0.2。你的方法不是接受JSON,它只是接受一个Form帖子,但你说的是Content-Type是json,它不是。由于您期望得到json的响应,因此您应该将Accept标头设置为json,并完全删除Content-Type

我认为更改这些应该可以解决您的问题。