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

jde*_*lop 53 continuous-integration unit-testing maven

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

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

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

Nic*_*ner 78

我假设您已经阅读了有关在确定的情况下运行单个测试的文档?他们没有告诉你的是如何在子模块中做到这一点:

mvn test -Dtest=testname -pl subproject
Run Code Online (Sandbox Code Playgroud)

subproject包含该测试的项目在哪里.从mvn手册页:

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

  • 如果要测试的模块依赖于其他子项目,则此解决方案不起作用. (22认同)
  • 如果要测试的子项目依赖于其他子项目,您还可以添加-am(--also-make的缩写)来构建依赖项 (7认同)
  • @Vadzim,对我来说它有助于使用`-DfailIfNoTests = false`:`mvn test -Dtest = testname -DfailIfNoTests = false` (5认同)

Deb*_*Ray 24

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

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

mvn test -DfailIfNoTests=false -Dtest={test_class_name} -am
Run Code Online (Sandbox Code Playgroud)

除此之外,这也可以mvn clean test -Dfa......clean在运行测试时总是运行是我个人的习惯.

引用..
-am将使所有其他子模块.
-DfailIfNoTests=false因为我们不打算在其他模块中运行测试,所以整个过程都不​​会失败.
-pl因为-am已经构建了一切,所以不需要选项

  • 如果我包含“-pl projectname”,我发现它的运行速度会稍快一些。 (2认同)
  • 感谢你的回答。让我很头疼。 (2认同)

小智 14

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

mvn test -DfailIfNoTests=false -Dtest=testname -pl subproject
Run Code Online (Sandbox Code Playgroud)

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