Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC:测试调用的特定带注释方法_Java_Spring_Unit Testing_Spring Mvc_Junit - Fatal编程技术网

Java SpringMVC:测试调用的特定带注释方法

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

在SpringMVC3.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);
        }
}

我如何测试在有人请求时调用此
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的回复!我喜欢你的主意。此时,我决定只测试代码,稍后在进行集成测试时,我将测试请求映射。