Spring MVC:测试特定的带注释方法

时间:2011-10-07 16:55:54

标签: java spring unit-testing spring-mvc junit

在Spring MVC 3.0中,如何测试调用特定方法?

例如,我有这种控制器方法:

public class myController {
    @RequestMapping(value = "/create", method = RequestMethod.GET)
    public ModelAndView create(ModelMap map) {
            map.put("category", new Category());
            return new ModelAndView("views/someView", map);
        }
}

当有人请求 http://example.com/create url时,如何测试调用此create()方法。

2 个答案:

答案 0 :(得分:2)

在单元测试中,您应该只测试控制器的Java代码,而不使用任何Servlet技术。

在集成测试中,您可以执行以下操作之一:

在spring-test工件中使用org.springframework.mock.web包,其中包含用于请求,响应,servletContext的模拟对象,以在您的控制器上触发虚假请求,并从虚假响应中读取数据。

或者使用像Selenium这样的Web测试框架,它可以对付已部署的Web应用程序。

答案 1 :(得分:1)

  

当有人请求http://example.com/create url时,如何测试此create()方法被调用。

看起来非常像集成测试。 Sean Patrick Floyd已经提到了一些测试方法,但据我所知,这些选项都没有真正测试对url的请求是否真的调用了该方法。 - 模拟方式模拟请求,selenium测试仅测试返回值,但不测试Invocation。 - 不要误解我的意思,我相信这两个其他测试在大多数情况下更好(更容易测试,甚至更有效的测试结果),但如果你真的想测试调用,我会想出这个解决方案。

使用像Selenium(或Selenium 2 / Webdriver)这样的Web测试框架,或者仅使用仅生成HTTP请求的简单框架。 - 要进行测试,您需要诅咒已部署的应用程序。 - 所以它真的是一个集成测试。

检查是否调用了该方法。我建议使用日志工具(Log4J)。然后使用AspectJ或Spring AOP Support等工具将日志语句添加到控制器方法中。应将日志记录写入某个记录器,该记录器写入另一个目标,然后写入您使用的其他记录器。

最后一步是,在测试发送http请求后,您需要验证预期的日志记录语句是否为日志文件。 (注意事实,日志记录可能是异步的。)