在我的maven项目中,我有很多模块。是否可以通过命令行选项关闭某些模块的运行单元测试?
我的项目大约需要15分钟才能完成所有单元测试。我想通过在我正在处理的模块中运行单元测试来加速整体构建。我不想进入并编辑每个单独的pom.xml来实现这一目标。
我已经尝试了这里概述的解决方案:Can I run a specific testng test group via maven?但是结果是我想要跳过的模块中的很多测试失败。我想'组'与模块的概念不一样?
答案 0 :(得分:79)
要为整个项目使用Maven Surefire Plugin's capability of skipping tests打开和关闭单元测试。从命令行使用skipTests有一个缺点。在多模块构建方案中,这将禁用所有模块的所有测试。
如果您需要更精细的粒度控制来运行模块的测试子集,请使用Maven Surefire Plugin's test inclusion and exclusion capabilities。
要允许命令行覆盖,请在配置Surefire插件时使用POM属性。以下面的POM段为例:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<excludes>
<exclude>${someModule.test.excludes}</exclude>
</excludes>
<includes>
<include>${someModule.test.includes}</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<someModule.skip.tests>false</someModule.skip.tests>
<skipTests>${someModule.skip.tests}</skipTests>
<someModule.test.includes>**/*Test.java</someModule.test.includes>
<someModule.test.excludes>**/*Test.java.bogus</someModule.test.excludes>
</properties>
使用上述POM,您可以通过多种方式执行测试。
mvn test
mvn -DskipTests=true test
mvn -DsomeModule.skip.tests=true test
mvn -DsomeModule.test.includes="**/*IncludeTest.java" test
mvn -DsomeModule.test.excludes="**/*ExcludeTest.java" test
答案 1 :(得分:13)
...如果您想将参数传递给Hudson / Jenkins中的maven release插件,则必须使用
的 -Darguments=-DskipTests
强>
让它发挥作用。
答案 2 :(得分:4)
如果您想使用Maven个人资料:
你可能想让它做这样的事情:
我不知道是否有支持的命令行选项也是如此。
您也可以尝试直接使用环境属性,根据此文档页面:
即。类似的东西:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<skipTests>${moduleA.skipTests}</skipTests>
</configuration>
</plugin>
然后使用mvn -DmoduleA.skipTests=false test
来测试那个模块。
答案 3 :(得分:2)
找到一种在命令行上排除的方法:
# Exclude one test class, by using the explanation mark (!)
mvn test -Dtest=!LegacyTest
# Exclude one test method
mvn verify -Dtest=!LegacyTest#testFoo
# Exclude two test methods
mvn verify -Dtest=!LegacyTest#testFoo+testBar
# Exclude a package with a wildcard (*)
mvn test -Dtest=!com.mycompany.app.Legacy*
来自:https://blog.jdriven.com/2017/10/run-one-or-exclude-one-test-with-maven/