如何使用JUNIT测试用例

时间:2016-06-15 06:44:49

标签: java spring-mvc junit

我有一个控制器方法。

@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中传递我的参数。

2 个答案:

答案 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();