【问题标题】:Maven Surefire Appropriate use of ExcludeMaven Surefire 正确使用 Exclude
【发布时间】:2020-08-25 19:51:42
【问题描述】:

我发现 Surefire <exclude> 标签无法正常工作。我已经尝试过多次,并查看了 stackoverflow 和其他网站上的许多问题,以及 Surefire 的文档,所以我在这里求助。我的情况是我希望能够通过 mvn package 命令控制运行哪些测试。我有大量的测试,而且我经常需要运行所有测试,然后逐步从需要运行的列表中删除一些(因为它们已被验证为正确)。

例如,假设我有 1 到 20 个单元测试。第一次执行 mvn package 时,我想运行全部 20 个。然后我将获取测试日志,看看是否有任何测试执行没有任何问题,然后我想从下一次执行中删除这些测试。第二次执行时,我会想运行测试 1 到 12、13 到 15 和 17 到 20。单独运行这些测试或者在每个 mvn CLI 命令中排除它们都很麻烦。

我首选的解决方案是在 pom.xml 上保留一个排除测试的列表,至少在我正在经历这个测试阶段时是暂时的。现在,我的 pom.xml 如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <packaging>jar</packaging>
  <version>...</version>
  <name>...</name>
  <url>...</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>
  <repositories>
    <repository>
      ...
    </repository>
  </repositories>
  <dependencies>
    ...
  </dependencies>
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>org.apache.maven.plugin</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M4</version>
        <configuration>
          <enableAssertions>true</enableAssertions>
          <excludes>
            <exclude>**/CleanUpCodeMaatWrapperTest.java</exclude>
            <exclude>**/AcdcWrapperTest.java</exclude>
            <exclude>**/CSourceToDepsBuilderWrapperTest.java</exclude>
            <exclude>**/JavaSourceToDepsBuilderWrapperTest.java</exclude>
            <exclude>**/PipeExtractorWrapperTest.java</exclude>
            <exclude>**/BatchCloneFinderWrapperTest.java</exclude>
            <exclude>**/InferencerTest.java</exclude>
            <exclude>**/TopicModelGeneratorTest.java</exclude>
          </excludes>
        </configuration>
      </plugin>
      ...
    </plugins>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
        <excludes>
          <exclude>**/*</exclude>
        </excludes>
      </testResource>
    </testResources>
  </build>
</project>

我已尽可能完整地保留它,以免遗漏任何重要信息。如果需要来自 pom.xml 的更多信息来解决这个问题,我很乐意提供。目前,这个 pom.xml 使用命令 mvn package 会导致在我的 src/test 目录中执行所有测试,包括上面列出的测试。指定完整路径,例如src/test/AcdcWrapperTest.java,会得到相同的结果。每次执行所有测试目前可能需要一个多小时,并且通过排除我知道此时正确的这些测试中的 3 或 4 个(从执行它们数十次),我可以将其降低一半那个。我不想永久删除这些测试,或者必须重命名它们才能让 Surefire 跳过它们,因为这也很笨拙。任何帮助都将不胜感激,因为我几个月来一直在努力解决这个问题。

【问题讨论】:

  • 你的测试真的在这个目录src/test/AcdcWrapperTest.java吗?
  • 不,抱歉,我认为这些信息已经足够了。测试位于src/test/java/... 内自己的包目录中。这里的目录结构遵循 maven 约定,镜像src/main/java/... 中的结构。另外澄清一下,我的意思是通过给出完整的路径,它仍然执行排除的测试。

标签: java maven unit-testing maven-surefire-plugin


【解决方案1】:

没有org.apache.maven.plugin这样的groupId但是有org.apache.maven.plugins,见官方docs .

改成这个配置就可以了:

...
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>3.0.0-M4</version>
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2015-09-11
    • 2014-01-07
    • 2018-12-20
    相关资源
    最近更新 更多