Java SpringMVC:测试调用的特定带注释方法
在SpringMVC3.0中,如何测试特定方法是否被调用 例如,我有一个控制器方法:Java SpringMVC:测试调用的特定带注释方法,java,spring,unit-testing,spring-mvc,junit,Java,Spring,Unit Testing,Spring Mvc,Junit,在SpringMVC3.0中,如何测试特定方法是否被调用 例如,我有一个控制器方法: public class myController { @RequestMapping(value = "/create", method = RequestMethod.GET) public ModelAndView create(ModelMap map) { map.put("category", new Category()); retu
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);
}
}
我如何测试在有人请求时调用此
create()
方法http://example.com/create 在单元测试中,您应该只测试控制器的Java代码,而不使用任何Servlet技术
在集成测试中,您可以执行以下几项操作之一:
使用spring测试工件中的包,它包含request、response和servletContext的模拟对象,以在控制器上触发假请求并从假响应中读取数据
或者使用像Selenium这样的web测试框架,它可以针对已部署的webapp工作
如何测试当有人请求url时是否调用此create()方法
看起来很像一个集成测试。肖恩·帕特里克·弗洛伊德(Sean Patrick Floyd)已经提到了一些测试方法,但据我所知,这些方法都不能真正测试对url的请求是否真正调用了该方法模拟方式模拟请求,selenium测试只测试返回值,而不测试调用。-不要误解我的意思,我相信其他两个测试在大多数情况下都更好(更容易测试,甚至更有效的测试结果),但是如果你真的想测试调用,我会想出这个解决方案
使用像Selenium(或Selenium 2/Webdriver)这样的web测试框架,或者只使用只生成HTTP请求的简单框架要进行该测试,您需要对已部署的应用程序进行测试。-因此,这实际上是一个集成测试
检查是否调用了该方法。我建议使用测井仪(Log4J)。然后使用AspectJ或SpringAOP支持等工具将日志语句添加到控制器方法中。日志应该写入到某个记录器,该记录器会先写入其他目标,然后再写入您使用的其他记录器
最后一步是,在测试发送http请求后,您需要验证预期的日志记录语句是否为日志文件。(请注意,日志记录可能是异步的。)感谢Sean的回复!我喜欢你的主意。此时,我决定只测试代码,稍后在进行集成测试时,我将测试请求映射。