当我在Tomcat上运行我的应用程序的弹簧context.xml文件位于
/WEB-inf/spring-context.xml
还行吧。 但在运行JUnit测试我对像这样我的弹簧试验context.xml中的位置,里面提供:
@ContextConfiguration(locations={"classpath:/spring-test-context.xml"})
这个作品的唯一方法是,如果该文件位于
/src/spring-context.xml
我怎样才能让我的应用程序,以找到在同一位置我的春天上下文文件? 因此,它的工作原理与JUnit的睾丸和部署在tomcat的?
我想这和它给了我很多关于没有发现任何错误豆的,但它并没有说这是不可能找到的文件..
classpath:/WEB-INF/spring-test-context.xml
正如duffymo暗示,那么Spring TestContext框架(TCF)假定字符串位置是在默认情况下classpath中。 有关详细信息,请参阅的JavaDoc ContextConfiguration 。
但是请注意,您可以在任何具有绝对或相对路径的文件系统中使用Spring的资源抽象(即通过使用“文件:”前缀),也可以指定资源。 你可以找到在JavaDoc在对细节modifyLocations()在Spring的方法AbstractContextLoader
。
因此,举例来说,如果你的XML配置文件位于"src/main/webapp/WEB-INF/spring-config.xml"
在项目文件夹,你可以按如下方式指定位置为相对文件系统路径:
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring-config.xml")
作为替代方案,你可以存储你的Spring配置文件在类路径(例如, src/main/resources
),然后通过在Spring MVC配置classpath中引用它们-例如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring-config.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
通过这种方法,您的测试配置只会是这样的(注意,表示该资源在类路径的根斜线):
@ContextConfiguration("/spring-config.xml")
你也可以找到与XML资源Context配置有用的参考手册的部分。
问候,
山姆
(Spring的TestContext框架的作者)
问题是,/ WEB-INF是不是在CLASSPATH的Web应用程序。 然而,/ WEB-INF / classes中是。
您与测试的问题是,你是不是在应用服务器上运行,所以WEB-INF / classes中是不是默认CLASSPATH的一部分。 我建议设置你的测试,这样,要么WEB-INF / classes中处于测试CLASSPATH或使用相对或绝对文件路径找到他们。