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

vyu0f0g1  于 2023-11-17  发布在  Maven
关注(0)|答案(4)|浏览(108)

在我的maven项目中,我有许多模块。是否可以通过命令行选项关闭某些模块的单元测试?
我的项目需要大约15分钟来运行所有的单元测试。我想通过运行我正在工作的模块中的单元测试来加快整体构建。我不想去编辑每个单独的pom.xml来实现这一点。
我尝试了这里列出的解决方案:Can I run a specific testng test group via maven?然而,结果是我想跳过的模块中有很多测试失败。我想“组”不是模块的同一个概念?

0wi1tuuw

0wi1tuuw1#

使用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测试源文件)

mvn test


1.跳过所有模块的所有测试

mvn -DskipTests=true test


1.跳过特定模块的所有测试

mvn -DsomeModule.skip.tests=true test


1.只为特定模块运行某些测试(本例包括所有**/* IncludeTest.java测试源文件)

mvn -DsomeModule.test.includes="**/*IncludeTest.java" test


1.排除特定模块的某些测试(此示例排除所有**/* ExcludeTest.java源文件)

mvn -DsomeModule.test.excludes="**/*ExcludeTest.java" test

kulphzqa

kulphzqa2#

找到了一种在命令行上排除的方法:

# 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*

字符串
来源:Run one or Exclude one test with Maven

ctehm74n

ctehm74n3#

.如果你想把参数传递给哈德逊/Jenkins中的maven release插件,你必须使用**-Darguments=-DskipTests**才能使它工作。

yr9zkbsy

yr9zkbsy4#

如果你想使用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来测试该模块。

相关问题