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

Java 为什么Gradle用失败的测试将我的构建标记为成功?,java,gradle,groovy,spock,Java,Gradle,Groovy,Spock,我有一个测试失败的Gradle构建,但Gradle没有将该构建注册为失败。然而,如果我删除了一个特定的测试用例,构建确实会正确地失败。为什么呢 $ ./gradlew clean check :clean :compileJava :processResources UP-TO-DATE :classes :compileTestJava :processTestResources UP-TO-DATE :testClasses :test com.example.FooProgramCli

我有一个测试失败的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

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

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

单元测试的代码是什么?问题中有点太复杂,无法直接显示,请参阅我添加到问题中的链接(与下面我的答案中的链接相同)。好的,如果你已经有了答案,那么你可以接受自己的答案,这样这个问题就不会显示为“打开”。是这样吗?是的。我犹豫了一会儿才接受,以防万一有其他答案出现。