为什么 Gradle 将测试失败的构建标记为成功?

Why does Gradle mark my build with failed tests as successful?

我有一个测试失败的 Gradle 构建,但是 Gradle 没有将构建注册为失败。但是,如果我删除特定的测试用例,构建确实会失败。这是为什么?

$ ./gradlew clean check

:clean
:compileJava
:processResources UP-TO-DATE
:classes
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:test

com.example.FooProgramCliTest > fail FAILED
    java.lang.AssertionError at FooProgramCliTest.java:26

1 test completed, 1 failed
:check

BUILD SUCCESSFUL

代码示例 on GitHub,因为它有点太大,无法在问题正文中有意义地重现。

确保您的测试不会无意中导致 System.exit(int) 被调用。这样做将防止 Gradle 注册测试失败。有关可能发生这种情况的示例用例,请参阅 here