如何忽略 Maven 构建中特定失败的单元测试结果?

How to ignore the specific failed unit test result in Maven build?

我在 Integration.java 下有一些单元测试。我希望 Maven 忽略此 class 的测试结果,因为它们很少失败(由于外部服务器维护)。但我不想从 运行 中忽略它们,因为我需要它们来覆盖代码。

我试过这个配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <includes>
            <include>IntegrationTest.java</include>
        </includes>
        <testFailureIgnore>true</testFailureIgnore>
    </configuration>
</plugin>

这似乎是通过忽略失败的测试来实现的。但是上述配置的问题是,它也忽略了其他 classes 的失败测试。

我希望 Integration.java 下的所有测试都需要执行,但它不应该对确定 success/failure 的构建有任何影响。 但是,如果任何测试用例在除 Integration.java

之外的任何其他测试 classes 下失败,构建应该会失败

Surefire 默认包括名称以 Test/ends 和 Test/Tests/TestCase.[=12= 开头的所有测试 类 ]

您可以根据需要使用排除和包含参数:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <configuration>
        <excludes>
            <exclude>DataTest.java</exclude>
        </excludes>
        <includes>
            <include>DataCheck.java</include>
        </includes>
    </configuration>
</plugin>

就像@khmarbaise提到的,它需要由maven-failsafe而不是surefire plugin

来处理
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <configuration>
        <includes>
            <include>*IntegrationTest.java</include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <id>failsafe-integration-tests</id>
            <phase>integration-test</phase>
            <goals>
                <goal>integration-test</goal>
            </goals>
        </execution>
    </executions>
</plugin>

通过使用 maven-failsafe-plugin 我确保了测试用例 运行 和良好的代码覆盖率,即使上游关闭,构建也不会失败。