有没有办法提供一些命令行参数以跳过所有测试,但在某个模块上跳过一个?所以每次我需要运行另一个测试时我都不需要更改 pom.xml 吗?
例如,我想在 TeamCity 上创建构建配置,并提供命令行参数以在某个模块中仅运行单个测试。下次我需要更改它并运行另一个测试,依此类推。
也许这不是 CI 的用途,但仍然如此。
有没有办法提供一些命令行参数以跳过所有测试,但在某个模块上跳过一个?所以每次我需要运行另一个测试时我都不需要更改 pom.xml 吗?
例如,我想在 TeamCity 上创建构建配置,并提供命令行参数以在某个模块中仅运行单个测试。下次我需要更改它并运行另一个测试,依此类推。
也许这不是 CI 的用途,但仍然如此。
我假设您已经阅读了有关在 surefire 下运行单个测试的文档?他们没有告诉你的是如何在子模块中做到这一点:
mvn test -Dtest=testname -pl subproject
subproject
包含该测试的项目在哪里。从 mvn 手册页:
-pl,--projects arg 要构建的指定反应器项目的逗号分隔列表,而不是所有项目。可以通过 [groupId]:artifactId 或其相对路径指定项目。
对于依赖于要构建的其他子模块的项目,我看到的其他答案并不完整。一种选择是运行mvn install
以将所需的 jar 安装到~/.m2/...
中,但该选项不是很“干净”。
以下命令将构建子模块,并仅运行指定的测试类。这将在父模块级别运行。此外,无需指定子模块名称。
mvn test -DfailIfNoTests=false -Dtest={test_class_name} -am
顺便说一句,这也可以mvn clean test -Dfa.....
。我有一个clean
在运行测试时总是运行的习惯。
References..
-am
将使所有其他子模块。
-DfailIfNoTests=false
不会使整个过程失败,因为我们不打算在其他模块中运行测试。
-pl
不需要选项,因为-am
已经在构建所有内容
如果要测试的模块依赖于其他项目,解决方案通过将命令更改为:
mvn test -DfailIfNoTests=false -Dtest=testname -pl subproject
FWIW,如果您有一个多模块项目,您可以使用此命令在父目录中运行所有测试。
mvn test -pl subproject
subproject
可以通过运行以下命令找到 的名称,通常为group-id:artifact-id
.
mvn help:active-profiles