maven ::在多模块项目中仅运行单个测试

问题描述 投票:50回答:3

有没有办法提供一些命令行参数,以跳过所有测试,但在某些模块上有一个?所以每次我需要运行另一个测试时我都不需要更改pom.xml吗?

例如,我想在TeamCity上创建构建配置,并提供命令行参数以在某个模块中仅运行单个测试。下次我需要更改它并运行另一个测试,依此类推。

也许不是如何使用CI,但仍然如此。

unit-testing maven continuous-integration
3个回答
68
投票

我假设你已经阅读了有关running a single test under surefire的文档?他们没有告诉你的是如何在子模块中做到这一点:

mvn test -Dtest=testname -pl subproject

其中subproject是包含该测试的项目。从mvn手册页:

-pl, - projects arg以逗号分隔的指定反应堆项目列表,而不是所有项目。项目可以由[groupId]:artifactId或其相对路径指定。


19
投票

对于依赖于要构建的其他子模块的项目,我看到的其他答案并不完全。一种选择是运行mvn install以将所需的罐安装到~/.m2/...中,但该选项不是很“干净”。

以下命令将构建子模块,并仅运行指定的测试类。这将在父模块级别运行。此外,无需指定子模块名称。

mvn test -DfailIfNoTests=false -Dtest={test_class_name} -am

顺便说一句,这也可以是mvn clean test -Dfa.....。在运行测试时总是运行clean是我个人的习惯。

参考.. -am将制作所有其他子模块。 -DfailIfNoTests=false并没有使整个过程失败,因为我们不打算在其他模块中运行测试。 由于-pl已经在构建一切,因此不需要-am选项


13
投票

如果要测试的模块依赖于其他项目,则解决方案通过将命令更改为:

mvn test -DfailIfNoTests=false -Dtest=testname -pl subproject

参考:http://www.automatethebox.com/2015/12/some-helpful-commands-to-build-multi.html

© www.soinside.com 2019 - 2024. All rights reserved.