【问题标题】:How to configure pom to run tests packaged in a jar?如何配置 pom 以运行打包在 jar 中的测试?
【发布时间】:2012-08-27 14:49:28
【问题描述】:

我有一个 Maven 构建过程,可将可执行 jar 及其测试发布到 Nexus。 我有另一个需要访问这些 jars(可执行文件 + 测试)并运行测试的 maven 构建过程。

我该怎么做?到目前为止,只有当 jar 被分解为类文件时,我才设法做到这一点。 我是 Maven 新手,完全迷失在文档中。

【问题讨论】:

  • 为什么要分离这些过程 - 构建和测试?
  • 可以修改两个项目的pom.xml吗?
  • 另外,你能详细说明一下你到目前为止所做的尝试吗?您提到您已“将 jar 分解为类文件”。你是手动完成的,还是使用 Maven 依赖插件?
  • @noahz,是的,我是。我正在尝试点击此链接:maven.apache.org/guides/mini/guide-attached-tests.html 但我不确定这是正确的方向。
  • 正如 Eugen 提到的,附加测试 jar 是标准的,但在不同的项目中执行它们不是。

标签: unit-testing maven jar


【解决方案1】:

附加的 test-jar 可以用作其他项目中的常用依赖项,它支持在测试区域中重用代码,但您不能从 jar 中运行测试。如果您真的需要解决方案,您必须至少编写一个套件(等等?)才能从 jar 启动测试。

【讨论】:

  • 您的意思是编写一个测试,使用 JUnitRunner 以编程方式执行特定 jar 中的测试吗?
  • 例如。你需要一些东西来引导 jar 中的测试。通常的测试(src/test/java)将由surefire开始......
【解决方案2】:

Surefire 和 failsafe 目前不支持从 jar 中运行测试。

这主要是无法识别测试的情况。

有两种方法可以让测试运行。

  1. 使用列出来自 test-jar 的所有测试的测试套件。因为测试套件将在 src/test/java 中(更准确地说是编译成 target/test-classes)将被拾取并且套件中的所有测试都将由 Surefire/failsafe 运行(假设套件类名称匹配包含规则:以 Test 开头或结尾)

  2. 使用 maven 依赖插件的 unpack-dependencies 目标将 test-jar 解压到 target/test-classes 中(这有点骇人听闻,但效果很好)

第一个选项的主要问题是您不能轻松地从套件中只运行一个测试,并且您需要从 test-jar 中命名每个测试

出于这个原因,我倾向于选择选项 2...还有一个额外的好处是选项 2 并不意味着编写代码来解决构建工具插件中的限制...您将自己锁定在特定构建中的次数越少工具,更好的恕我直言

【讨论】:

  • 那太糟糕了。不过,这似乎并不是一个牵强附会的要求。我将求助于选项 2。谢谢。
  • 是的,它在路线图上......但还没有实施
  • 咳咳...我在 Maven PMC 上...它在我的痒痒清单上,因为它也在 Kristian(他最近发布了大部分 Surefire 版本)的清单上...问题更多的是它不是一种紧迫的瘙痒,我们都没有感到迫切需要将这种瘙痒刮到其他瘙痒上。如果您想准备一个补丁,我将非常乐意审查该补丁以提交它。请参阅:javaadventure.blogspot.ie/2012/07/… 了解补丁需要是什么样的
  • 哦!原谅我的无知。什么是 PMC? (我知道 PM..)
  • 在相同的上下文中,您能否澄清一下这样做的目的:maven.apache.org/guides/mini/guide-attached-tests.html
【解决方案3】:

这实际上适用于较新的surefire和故障安全插件,请参阅相关问题:

因此您不再需要解压 jar,只需提供组和工件 ID 以供扫描依赖项(这适用于“main jar”依赖项以及“test-jar”依赖项)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2019-02-15
    • 1970-01-01
    • 2011-07-06
    相关资源
    最近更新 更多