【发布时间】: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