测试的包含和排除

夹杂物

默认情况下,Surefire 插件会自动包含所有具有以下通配符模式的测试类:

  • “**/Test*.java” - 包括其所有子目录和所有以“Test”开头的 java 文件名。
  • “**/*Test.java” - 包括其所有子目录和所有以“Test”结尾的 java 文件名。
  • “**/*TestCase.java” - 包括其所有子目录和所有以“TestCase”结尾的 java 文件名。

如果测试类不符合命名约定,则配置 Surefire 插件并指定要包含的测试。

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>
        <configuration>
          <includes>
            <include>Sample.java</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

排除项

有时某些测试会导致构建失败。排除它们是继续构建的最佳解决方法之一。可以通过配置插件的excludes属性来完成排除。

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>
        <configuration>
          <excludes>
            <exclude>**/TestCircle.java</exclude>
            <exclude>**/TestSquare.java</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

正则表达式支持

包含/排除模式可以是 ant 样式的路径表达式,但此语法也支持正则表达式:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>
        <configuration>
          <includes>
            <include>%regex[.*[Cat|Dog].*Test.*]</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

注意语法 %regex[expr],其中 expr 是实际的表达式,其余的只是包装。另请注意,正则表达式匹配是通过 .class 文件而不是 .java 文件完成的。