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