Spring Maven单元测试应用程序上下文加载错误文件
Posted
技术标签:
【中文标题】Spring Maven单元测试应用程序上下文加载错误文件【英文标题】:Spring Maven unitTest applicationContext loading wrong file 【发布时间】:2013-09-05 14:44:09 【问题描述】:.我有一个项目,它在src/main/webapp/WEB-INF
中有一个 spring-config.xml 文件,在 src/test/resources
中有一个 applicationContext.xml 文件。我在src/test/java
中还有一个用于单元测试的抽象测试基类,看起来像:
@ContextConfiguration(locations = "classpath:/applicationContext.xml")
public abstract class AbstractTestBase extends AbstractTransactionalJUnit4SpringContextTests
//Common code and fields
我所有的单元测试都扩展了这个 AbstractTestBase,它指向 src/test/resources
或应该的上下文。运行我的单元测试时出现问题,它正在拉入 spring-config.xml 文件。
我的团队正在处理的其他项目具有相同的文件结构、相同的应用程序上下文设置并按预期运行,但即使我将项目中的每个文件并排放置,我也看不到他们的文件在哪里运行,而这个没有。
我是 spring 新手,所以我不知道我应该寻找什么。
在所有文件都存在的情况下,Spring 或 Maven 是否不会采用我正在处理的应用程序上下文?有什么我可能会丢失的吗?
编辑:更正以反映一个文件是 spring-config 文件。
【问题讨论】:
Maven 应该在src/test/resources
中寻找资源文件。它不应该进入src/main/webapp/WEB-INF
,因为它不是一个Web 应用程序,甚至不知道那个位置。如果您从该文件夹中删除(移动)会发生什么?
您确定您的类路径中没有多个applicationContext.xml
文件吗?使用该语法将加载它找到的第一个然后停止,并且 jar 顺序并不总是可预测的。
@SotiriosDelimanolis 这确实看起来像一个Web应用程序,习惯上将Spring配置放在src/main/webapp/WEB-INF
中。
@chrylis 这是一个 Web 应用程序,但是在运行测试时不应该有任何 WEB-INF
的概念。
@sparks 除非您实际上将整个服务器作为测试工具的一部分启动,否则它不会;测试配置不需要WEB-INF
中指定的任何内容,而应该只是DispatcherServlet
的配置。
【参考方案1】:
"classpath:/applicationContext.xml"
应该在src/test/resources
下查看。
但应该注意的是,使用该语法将加载它找到的第一个语法,然后按照 '@chrylis' 的说明停止。
我曾经遇到过类似的问题。
您一定一直在使用 IDE。您的项目目录中的target/test-classes/ (in Eclipse IDE)
中必须有applicationContext.xml
文件,该文件是src/main/webapp/WEB-INF
下的xml 文件的副本或类似的xml 文件。
【讨论】:
src/test/resources
下只有一个名为applicationContext.xml
的文件,而target/test-classes/
文件夹下有一个与spring config文件同名的文件(名为spring-config.xml
) . 1) 文件名不是applicationContext.xml
2) 如何更改它以加载 applicationContext.xml?
不确定,但我会尝试删除所有 test-classes/
并再次运行测试。尝试一下。另外,如果我是你,我会重新检查是否遗漏了其他东西。
显然丢弃 test-classes/ 中的所有内容似乎有效。我已经能够超越这个问题(进入其他不相关的问题),但它还没有成为一个问题。以上是关于Spring Maven单元测试应用程序上下文加载错误文件的主要内容,如果未能解决你的问题,请参考以下文章
编辑并重新运行 Spring Boot 单元测试,无需重新加载上下文以加快测试速度
spring boot单元测试spring context重复加载问题