Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
servlet容器外部的java测试servlet_Java_Spring_Unit Testing_Servlets - Fatal编程技术网

servlet容器外部的java测试servlet

servlet容器外部的java测试servlet,java,spring,unit-testing,servlets,Java,Spring,Unit Testing,Servlets,我有下一个问题。我想测试servlet(如果我通过Tomcat手动尝试,它会工作): 问题是: java.lang.NullPointerException at controller.MainServlet.doGet(MainServlet.java:48) at servlet.MainServletTest.testCategories(MainServletTest.java:67) blabla 我认为问题在于Tomcat调用init()方法(和Spring

我有下一个问题。我想测试servlet(如果我通过Tomcat手动尝试,它会工作):

问题是:

java.lang.NullPointerException
    at controller.MainServlet.doGet(MainServlet.java:48)
    at servlet.MainServletTest.testCategories(MainServletTest.java:67)
    blabla

我认为问题在于Tomcat调用init()方法(和Spring初始化categorisesDao)。在我的例子中,不会调用init(),也不会启动自动连线对象。我的问题是如何在Servlet容器外部调用init()。

我认为您还需要将定义DAO的xml文件添加到@ContextConfiguration中。类似

 @ContextConfiguration(locations = {"classpath:application-context-test.xml","classpath*:dao.xml"})

我发现有一个JUnit扩展名为Cactus。它可用于测试不带容器的servlet:

您在哪里定义了DAO?为什么不模拟DAO?为什么要用@Controller注释servlet?为什么不让它成为真正的Spring控制器而不是servlet?单元测试不需要spring上下文。只需模拟您的合作者。通过spring扫描在application-context-test.xml中进行测试。对于application-context.xml中的servlet,spring通过web.xml连接到web应用程序。
java.lang.NullPointerException
    at controller.MainServlet.doGet(MainServlet.java:48)
    at servlet.MainServletTest.testCategories(MainServletTest.java:67)
    blabla
 @ContextConfiguration(locations = {"classpath:application-context-test.xml","classpath*:dao.xml"})