maven:如何通过命令行选项在某些项目中跳过测试?

时间:2012-02-03 02:51:32

标签: maven maven-2

在我的maven项目中,我有很多模块。是否可以通过命令行选项关闭某些模块的运行单元测试?

我的项目大约需要15分钟才能完成所有单元测试。我想通过在我正在处理的模块中运行单元测试来加速整体构建。我不想进入并编辑每个单独的pom.xml来实现这一目标。

我已经尝试了这里概述的解决方案:Can I run a specific testng test group via maven?但是结果是我想要跳过的模块中的很多测试失败。我想'组'与模块的概念不一样?

4 个答案:

答案 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,您可以通过多种方式执行测试。

  1. 运行所有测试(以上配置包括所有** / * Test.java测试源文件)
  2. mvn test
    
    1. 跳过所有模块的所有测试
    2. mvn -DskipTests=true test
      
      1. 跳过特定模块的所有测试
      2. mvn -DsomeModule.skip.tests=true test
        
        1. 仅针对特定模块运行某些测试(此示例包括所有** / * IncludeTest.java测试源文件)
        2. mvn -DsomeModule.test.includes="**/*IncludeTest.java" test
          
          1. 排除特定模块的某些测试(此示例排除所有** / * ExcludeTest.java源文件)
          2. 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/