【问题标题】:Include / exclude tests with Maven Surefire + JUnit5 from command line从命令行使用 Maven Surefire + JUnit5 包含/排除测试
【发布时间】:2021-09-16 09:12:01
【问题描述】:

我想为 Apache James 运行构建,它有一个巨大的测试套件,由于与我无关的测试,例如运行很长时间,例如关于 RabbitMQ 的测试。因此,我想排除这些并且我想从命令行中这样做(而不是通过编辑 POM)。我在 Java 11 OpenJDK 上使用 Maven 3.6.3。该项目使用 JUnit5 和 maven-surefire-plugin 2.22.2。

现在,我希望 the following 可以工作:

例如,仅运行 org.example.MyTest 测试中的测试方法 类你可以执行 mvn -Dtest=org.example.MyTest test 从 命令行。

但它不起作用。事实上,只要我将 test 参数设置为 anything 而非空字符串,就会跳过 all 测试。我尝试了一些syntax that is supposedly supported...

mvn package -Dtest=*
mvn package -Dtest=".*"
mvn package -Dtest=\!SomethingFishy
mvn package -Dtest='!MavenHeadache'
mvn package -Dtest='!%regex[.*HelpMe.*]'

...但结果总是一样的:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test
  (default-test) on project testing-base: No tests were executed!  
  (Set -DfailIfNoTests=false to ignore this error.) -> [Help 1]

我正在运行 package 目标,就像它执行完整构建一样,但 test 的行为相同。还尝试指定-Dincludes=... / -Dexcludes=...,这根本没有效果:无论如何都会执行所有测试,并且参数甚至不会出现在mvn -X ...的输出中。将 maven-surefire-plugin 更新到最新版本 3.0.0-M5 时,此行为不会改变。

我在这里理解有什么问题吗?如何在此设置中指定包含/排除?


更新:这似乎是由嵌套项目和/或 James 的项目结构引起的。如果我输入一个“叶子项目”,例如core,然后包含/排除开始工作:

cd core
mvn test -Dtest=HostTest         # will only run HostTest, as expected
mvn test -Dtest=\!HostTest       # will run all tests but HostTest, as expected

按照 RobertScholte 的建议,我查看了 maven-surefire-plugin 配置,但找不到任何似乎与此行为相关的内容。

【问题讨论】:

  • 你读过maven.apache.org/surefire/maven-surefire-plugin/… 应该和-Dtest=!RabbitMQTest一样简单
  • 它对我有用。您需要检查 maven-surefire-plugin 的配置。
  • @RobertScholte 它适用于 Apache James 项目还是其他项目?我查看了那里的配置,但没有发现任何可疑之处。 OTOH,这个项目很大,有超过 250 个子项目......
  • 哇!我对罗伯特的第一条回复评论已被删除。它说“是的,我有。不,它不起作用,它排除了所有测试,正如我所描述的。请自己尝试。”
  • 这很可能是 Apache James 配置的问题。项目太大,简单分析问题。你可以做的事情:询问 apache James 邮件列表他们是否知道这一点。运行 mvn -pl :<artifactId> -am -X test -Dtest=myValue 其中 是您尝试测试的模块的 artifactId。在调试日志中查找 maven-surefire-plugin 中 test 的值。

标签: java maven junit5 maven-surefire-plugin


【解决方案1】:

错误消息告诉您需要了解的内容:在第一个运行的项目testing-base 中,没有与您的模式匹配的测试,因此无法确保您不会对成功产生错误印象。

然后建议使用-DfailIfNoTests=false 选项让 maven 忽略没有任何测试匹配模式的模块(这可能是您需要的)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 2017-09-28
  • 1970-01-01
  • 2022-07-24
  • 2012-08-11
  • 2012-12-21
  • 1970-01-01
  • 2019-05-16
相关资源
最近更新 更多