Java 如何对spring mvc控制器发送的ResponseBody或ResponseEntity进行单元测试?

Java 如何对spring mvc控制器发送的ResponseBody或ResponseEntity进行单元测试?,java,unit-testing,spring-mvc,junit,Java,Unit Testing,Spring Mvc,Junit,当我进行junit测试时,我会这样做来测试spring mvc控制器: request.setRequestURI("/projects/"+idProject+"/modify"); ModelAndView mv = handlerAdapter.handle(request, response, controller); 测试的控制器如下所示: @RequestMapping(value = "{id}/modify") public String content(ModelMap mo

当我进行junit测试时,我会这样做来测试spring mvc控制器:

request.setRequestURI("/projects/"+idProject+"/modify");
ModelAndView mv = handlerAdapter.handle(request, response, controller);
测试的控制器如下所示:

@RequestMapping(value = "{id}/modify")
public String content(ModelMap model, @PathVariable("id") Project object) {
但我找不到如何获得请求处理程序的
ResponseBody
答案,定义如下:

@RequestMapping("/management/search")
public @ResponseBody ArrayList<SearchData> search(@RequestParam("q")) {
        ....
                ....
        ArrayList<SearchData> datas = ....;

        return datas;
    }
@RequestMapping(“/management/search”)
public@ResponseBody数组列表搜索(@RequestParam(“q”)){
....
....
ArrayList数据=。。。。;
返回数据;
}

您的单元测试只需要验证方法返回值的内容:

ArrayList<SearchData> results = controller.search("value");
assertThat(results, ...)
arraylistresults=controller.search(“值”);
资产(结果…)
@ResponseBody
注释不相关。这是带注释控制器的一大好处——您的单元测试可以关注业务逻辑,而不是框架机制。对于预注释控制器,一半的测试代码用于构造模拟请求、响应和相关的GUBBIN。这会让人分心


测试代码注释是否与框架正确集成是集成和/或功能测试的工作。

此外,对于响应性结果,您可以调用getBody来获得结果。i、 e.响应结果=控制器搜索(“值”);MyObject obj=results.getBody();断言(obj,…)我希望链接到我自己的博客不是一种坏形式。二月份,我写了一些与测试控制器直接相关的条目。后者测试一个返回ResponseEntity的方法。好的,谢谢你的回答,skaffman,你是对的,我只需要验证返回值的内容。我不同意这个答案。测试注释、请求参数等非常重要。这个问题的作者在使用
handleAdapter
@egervari时是正确的:我没有说这不重要,我说这不是单元测试的工作,正如我的最后一句话所说。环顾四周,我发现了另一个解决方案,在我的例子中,它似乎很容易实现,并且很适合我的测试代码。