1

这是我的控制器方法:

    @RequestMapping(method = RequestMethod.PUT,produces="application/json", headers = "content-type=application/json")
    public @ResponseBody User updateUser(@RequestBody User user) throws PropertyErrorException, ItemNotFoundException {         
        return service.UpdateUser(user);     
    }

使用 Spring test-mvc 我想写一个单元测试用例:

@Test
public void UpdateUser() throws Exception {     
    mockMvc.perform(put("/r01/users").body(userJsonString.getBytes())
        .accept(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk())
        .andExpect(content().type(MediaType.APPLICATION_JSON))
        .andExpect(content().string(userString));
}

运行这个测试用例会生成:

WARN org.springframework.web.servlet.PageNotFound - Request method 'PUT' not supported

此外,从不调用 updateUser 方法,响应代码为 405。

我已经编写了很多测试,所有的 GET 请求,并且它们工作正常。这意味着我对 ContextConfiguration 很有信心。我错过了什么?

4

1 回答 1

3

您在 @RequestMapping 方法中明确期望内容类型的标头,但没有在您的请求中发送内容类型,我认为这就是请求失败的原因..试试这个。

mockMvc.perform(put("/r01/users").contentType(MediaType.APPLICATION_JSON).body(userJsonString.getBytes())
    .accept(MediaType.APPLICATION_JSON))
    .andExpect(status().isOk())
    .andExpect(content().type(MediaType.APPLICATION_JSON))
    .andExpect(content().string(userString));
于 2012-09-06T19:18:35.133 回答