我无法让单元测试使用提供的资源src\test\resources
而不是src\main\resources
. 是的,有问题的资源在两个地方的名称相同。
我做了相当多的研究,查看了 StackOverflow 的帖子,例如:
然而,这个基本问题让我很难过。
我设置了一个非常标准的 Maven Java 项目:
- 应用程序源和资源下
src\main
- 测试源和资源下
src\test
Eclipse(感谢 M2Eclipse 插件)在其构建路径中有 、 和src\main\java
all src\main\resources
。src\test\java
src\test\resources
使用此设置,当我从 Eclipse 资源文件中运行单元测试时,src\main\resources
会引用其中的资源文件。我知道为什么(因为它们在构建路径中),但我不知道如何防止它。单元测试配置面板不允许我调整(默认)类路径组件的顺序。
即使我要掩饰我无法从 Eclipse 运行我的测试,Maven 也不能很好地发挥作用。我可以看到该processResources
步骤是将所有测试资源复制到target\test-classes
树下。但是,当执行单元测试时,target\classes
正在查阅资源文件的副本。
当然,我忽略了一些明显的东西。感谢您提供的任何帮助。
[编辑]添加更多(可能相关信息):
有问题的资源文件是一个名为persistence.xml
. Eclipselink使用它来连接到关系数据源。应用程序使用的文件版本位于src\main\resources\META-INF
. Maven 构建(比如 WAR)将META-INF
目录放在目录下classes
。因此 EclipseLink 工具会找到这个文件。
src/main
|
+ -- java/com/company/ProductDao.java
|
+ -- resources/META-INF/persistence.xml (Requires application container)
|
src/test
|
+ -- java/com/company/ProductDaoTest.java
|
+ -- resources/META-INF/persistence.xml (out of container for unit tests)
|
这里的要点是:EclipseLink 需要在类路径上的目录中persistence.xml
调用META-INF
一个文件(是的,可以覆盖默认值,但我们不要去那里)。
因此,当单元测试运行时,会调用相同的应用程序逻辑。但是src\main\resources
不能使用文件的版本。目录中提供了不同的版本src\test\resources
。
由于src\main\resources
正在使用中的版本,看来我唯一的办法是在单元测试期间指示 Eclipselink 查找不同的文件名。