java - 测试时无法让 Maven(和 Eclipse)使用测试资源

标签 java eclipse unit-testing maven

我在进行单元测试以使用 src\test\resources 下提供的资源时遇到问题而不是src\main\resources中的那些。是的,相关资源在两个地方的名称都相同。

我做了相当多的研究,查看了 StackOverflow 帖子,例如:

然而这个基本问题却难住了我。

我设置了一个非常标准的 Maven Java 项目:

  • src\main下的应用程序源和资源
  • src\test下的测试源和资源

Eclipse(感谢 M2Eclipse 插件)有 src\main\java , src\main\resources , src\test\javasrc\test\resources全部在其构建路径中。

通过此设置,当我从 src\main\resources 中的 Eclipse 资源文件中运行单元测试时正在被引用。我可以明白为什么(因为它们位于构建路径中),但我不知道如何防止它。单元测试配置面板不允许我调整(默认)类路径组件的顺序。

即使我要掩盖我无法从 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 查找不同的文件名。

最佳答案

这从根本上来说并不是 Maven 问题。如果您将所有内容都折叠到单个源文件夹中,则会遇到完全相同的问题。想想你真正在做什么。您的单元测试需要 src/main 中的代码,否则它就不是该代码的单元测试。 src/main/java 和 src/main/resources 组成了您正在测试的 Artifact 。您不会混合和匹配单元测试的目录。

你基本上是这样做的:

/src/com/mycompany/myresource.txt        
/src/com/mycompany/MyAwesomeClass.java
/src/com/mycompany/myresource.txt
/src/com/mycompany/TestMyAwesomeClass.java

不要那样做。配置您的单元测试以从另一个文件加载模拟数据/资源文件。

我在使用 Maven 和 Eclipse 时没有遇到太多(如果有的话)问题。意识到 Maven 并不神奇。如果您要使用 Maven 和 Eclipse,一切都必须由 POM 文件驱动,而不是相反。然后事情就会顺利进行。

重申一下,您的问题与 Maven 无关。您在类路径上声明了两次资源。您需要重新考虑您的单元测试。您可以采取一些措施来使用配置文件来解决此问题,但这是对构建系统的滥用。

关于java - 测试时无法让 Maven(和 Eclipse)使用测试资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11281959/

相关文章:

java - 使用 Apache POI 在 java 中读取 excel (xlsx) 文件(得到奇怪的数字)

java - 无法在 Mac 上加载 jar-with-dependencies

eclipse - 如何在 subclipse 中更改我的 SVN 帐户

java - ClassNotFoundException 即使包含该类的 jar 正确存在于类路径中

Android多模块测试依赖

java.sql.SQLException : no such column with the value I'm trying to insert

java - 在本地机器上运行 mapreduce 时在 IDEA 和集群上的 hadoop 上运行不同的输出

eclipse - 在 Eclipse 中将文件或文件夹添加到 Git 存储库

android - 意外的断言行为

c++ - Visual Studio 对静态库进行单元测试;防止主项目中出现额外的依赖项