maven-2 - 如何在 Maven/Surefire 单元测试运行 "mvn test"期间使 list 可用?

标签 maven-2 junit4 surefire manifest.mf

如何在 Maven/Surefire unittest run "mvn test"期间使 list 可用?

我有一个开源项目,我正在从 Ant 转换为 Maven,包括它的单元测试。这是 Maven 项目的项目源代码库:
http://github.com/znerd/logdoc

我的问题与称为“基础”的主要模块有关。这个模块有一个单元测试来测试静态方法getVersion()的行为。在类(class) org.znerd.logdoc.Library .此方法返回:

Library.class.getPackage().getImplementationVersion()
getImplementationVersion()方法返回 list 文件中设置的值。到现在为止还挺好。我过去对此进行了测试,它运行良好,只要 list 确实在路径 META-INF/MANIFEST.MF 的类路径上可用(在文件系统上或在 JAR 文件中)。

现在我的挑战是当我运行单元测试时 list 文件不可用:
mvn test

Surefire 运行单元测试,但我的单元测试失败并显示一条消息,指示 Library.getVersion()返回 null .

当我想检查 JAR 时,我发现它甚至还没有生成。在将资源添加到类路径之前,Maven/Surefire 针对类运行单元测试。

进一步调查显示 Surefire 在临时目录中生成自己的 JAR 文件,例如
/private/var/folders/TR/TREvj1wIHYyAcUy-xmc3UU+++TI/-Tmp-/surefirebooter7448562488934426857.jar

然后使用这个 JAR 加载 Library 类。这个 JAR 不包含我停留在 src/main/resources 下的资源。 .所以把 META-INF/MANIFEST.MF文件也不起作用。

那么我如何告诉 Surefire 拥有我的 META-INF/MANIFEST.MF文件可从与 Library 相同的类加载器中获得类(class)。

Note that I use Maven 2.2.0, Java 1.6.0_17 on Mac OS X 10.6.2, with JUnit 4.8.1.

最佳答案

好吧,正如您指出的那样,问题在于 MANIFEST.MFpackage 期间生成并直接包含在最终的 jar 中,所有这些都发生在 test 之后.所以我想你必须要么:

  • 提供your own MANIFEST.MF (在 target/classes 期间合并之前将在 package 中可用)。我不知道这是否是一个选项(以及它是否会起作用)。
  • 根据 JAR 从另一个模块放置并运行您的测试。
  • 关于maven-2 - 如何在 Maven/Surefire 单元测试运行 "mvn test"期间使 list 可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2916209/

    相关文章:

    java - 将 Maven 依赖项导入 intellij 的类路径

    Java Connect 数据源永无止境

    java - 将自定义注释 Hook 到 Maven 中的 JUnit 测试器

    maven - 使用 maven 程序集插件解压 tar 时如何保留符号链接(symbolic link)

    maven-2 - 基于多个属性激活maven profile

    maven-2 - 如何设置 TeamCity 代理以使用单独的 Maven 本地存储库?

    java - 在单元测试中访问资源

    java - 即使在 Junit 测试从 with in 'finally' block 中抛出断言错误后, 'try' block 是否会触发?

    maven - 使用位于 src/test/java 中的 Maven 运行 Spock 测试

    maven-2 - 通过maven2显示junit失败消息