代码之家  ›  专栏  ›  技术社区  ›  Ernst de Haan

如何使清单在maven/surefire单元测试运行“mvn测试”期间可用?

  •  9
  • Ernst de Haan  · 技术社区  · 15 年前

    如何使清单在maven/surefire单元测试运行“mvn测试”期间可用?

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

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

    Library.class.getPackage().getImplementationVersion()
    

    这个 getImplementationVersion() 方法返回清单文件中设置的值。到目前为止,一切都很好。我在过去测试过它,并且它工作得很好,只要路径的类路径上确实有清单。 META-INF/MANIFEST.MF (在文件系统或JAR文件中)。

    现在我面临的挑战是,运行单元测试时清单文件不可用:

    mvn test
    

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

    当我想检查这个罐子时,我发现它甚至没有被生成。Maven/Surefire对类运行单元测试, 之前 资源被添加到类路径。

    进一步调查显示,Surefire在临时目录中生成自己的JAR文件,例如

    /private/var/folders/TR/TREvj1wIHYyAcUy-xmc3UU+++TI/-Tmp-/surefirebooter7448562488934426857.jar
    

    然后使用这个jar加载库类。这个jar不包含我卡在下面的资源 src/main/resources . 所以把一个 META-INF/清单.mf 文件也不工作。

    那么我该如何告诉Surefire META-INF/清单.mf 文件可从与 Library 班级。

    请注意,我使用Maven 2.2.0,Java1.6017在Mac OS x0.62上使用JUnit 4.81.

    1 回复  |  直到 15 年前
        1
  •  2
  •   Pascal Thivent    15 年前

    嗯,正如你指出的,问题是 MANIFEST.MF 生成于 package 直接包含在最后一个罐子里,所有这些都发生在 test . 所以我想你要么:

    • 提供 your own MANIFEST.MF (可以在 target/classes 在合并之前 包裹 )我不知道这是否是一种选择(是否可行)。
    • 根据JAR,从另一个模块执行测试。
    推荐文章