9

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

我有一个开源项目,我正在从 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.

当我想检查 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

请注意,我在 Mac OS X 10.6.2 上使用 Maven 2.2.0、Java 1.6.0_17 和 JUnit 4.8.1。

4

1 回答 1

2

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

  • 提供您自己的 MANIFEST.MFtarget/classes (在合并之前可用package)。我不知道这是否是一个选项(以及它是否会起作用)。
  • 根据 JAR 从另一个模块放置并运行您的测试。
于 2010-05-26T21:08:09.337 回答