bounty将在3天后过期。回答此问题可获得+100声望奖励。Ilyas Patel希望引起更多人关注此问题。
我有一系列的JUnit 5测试,这些测试必须分批运行(使用标记)。一旦一个批次完成,下一个批次应该继续。如果第一个批次中有任何测试失败,第二个批次不会启动,这不是我想要的行为。
我被告知使用Gradle或Shell返回退出代码零(这表示成功),以便批量测试在管道中继续。我理解这意味着构建将始终显示为通过。
在我的build.gradle文件中,我尝试过:
test {
ignoreFailures = true
useJUnitPlatform {
includeTags itags
excludeTags etags
}
testLogging {
events("passed", "skipped", "failed")
}
afterSuite {
if (test.result == TestResult.FAILURE) {
System.exit(0)
}
}
}
afterSuite抛出了一个错误,所以我不确定我是否有语法错误。构建不识别“test”。
我也试过在壳牌
set +x
gradle clean build test
if [ $? -ne 0 ]; then
exit 0
fi
set -x
但也不管用。
1条答案
按热度按时间5m1hhzi41#
您可以在下面找到一个完整的示例项目,希望它能满足您的需求(已使用Gradle 8.0.2进行测试)。该项目使用JVM Test Suite Plugin为每批测试定义一个测试套件,并使用特定的JUnit 5标记。
示例项目中的文件
我们有以下目录结构(为简洁起见,未显示Gradle Wrapper文件):
settings.gradle
为空,build.gradle
包含以下内容:下面是
MyTest.java
的内容:注意,我们所有的标签都有失败的测试。
运行示例项目
我们可以使用
./gradlew test
和./gradlew test2
分别运行批处理,也可以使用./gradlew check
一次性运行所有批处理。对于后者,我们得到以下输出:尽管每个批次的测试都失败了,但整个构建都被标记为成功(因为使用了
ignoreFailures = true
配置),因此整个构建的退出代码也是0。