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


74

有什么方法可以提供一些命令行参数来跳过所有测试,而只跳过某个模块上的测试?因此,我不需要每次运行其他测试时都更改pom.xml吗?

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

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


您看到这个话题了吗?stackoverflow.com/questions/1873995/…,这里还有更多:maven.apache.org/plugins/maven-surefire-plugin/examples/…除了这些我找不到。
MaunoVähä2012年

10
@MaunoV。实际上,如果有多个模块,则测试将失败。我找到了解决方案:-Dtest = TestName -DfailIfNoTests = false
jdevelop

Answers:


97

我假设您已阅读有关在surefire下运行单个测试的文档?他们没有告诉您的是如何在子模块中执行此操作:

mvn test -Dtest=testname -pl subproject

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

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


我希望有中又未指定子项目,所以我没有去想办法(我能为做一个bash,但它的丑陋)
西罗桑蒂利郝海东冠状病六四事件法轮功

32
如果要测试的模块依赖于其他子项目,则此解决方案不起作用。
Vadzim 2015年

9
@Vadzim,对我来说,它有助于使用-DfailIfNoTests=falsemvn test -Dtest=testname -DfailIfNoTests=false
Abdull

12
如果您要测试的子项目依赖于其他子项目,您还可以添加-am(--also-make的缩写)来构建依赖项
Jack Davidson

1
@CiroSantilli刘晓波死六四事件法轮功 请看这篇文章
Debosmit Ray

31

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

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

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

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

References ..
-am将构成所有其他子模块。
-DfailIfNoTests=false不会使整个过程失败,因为我们不打算在其他模块中运行测试。
-pl不需要选项,因为-am已经构建了所有内容


1
我发现如果包含“ -pl projectname”,它的运行速度会稍微加快。
Curtis Yallop

有没有办法在子模块中运行所有测试并构建其依赖的所有模块?像mvn test -DfailIfNoTests = false -Dtest = {moduleName} -am
Anon,

@Anon不会发表评论@CurtisYallop吗?
Debosmit Ray

@DebosmitRay否。如果我想从module1-test运行测试,而module1-test取决于module2-test,那么mvn test -pl module1-test -am也将从module2-test运行测试。
Anon

2
感谢你的回答。救了我头疼。
Debadatta

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.