在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()
方法。
答案 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请求后,您需要验证预期的日志记录语句是否为日志文件。 (注意事实,日志记录可能是异步的。)