Gradle中Kotest未上报PASSED测试问题咨询
问题描述
我在build.gradle.kts中配置了如下内容:
tasks.withType<Test>().configureEach { testLogging { events = setOf(PASSED, SKIPPED, FAILED) } }
我的Kotest测试示例如下:
class MyTests : StringSpec({ "should fail" { 1 shouldBe 2 } "should skip".config(enabled = false) {} "should pass" { 1 shouldBe 1 } })
执行./gradlew test --info时,仅能看到前两个测试分别被标记为FAILED和SKIPPED,本应显示为PASSED的第三个测试却完全没有被上报。请问是我的配置有误,还是该功能缺失?
解决方案
这并非配置错误,而是Kotest与Gradle默认测试日志集成的特性差异。Gradle的testLogging依赖测试框架主动发送事件,但Kotest默认不会在--info级别下向Gradle上报通过的测试事件。
你可以通过以下几种方式解决:
提升Gradle日志级别至
--debug
执行命令时使用更高日志级别,即可捕获Kotest发送的通过测试事件:./gradlew test --debug配置Kotest主动输出通过测试
可以通过两种方式配置:- 在
build.gradle.kts中添加系统属性:tasks.withType<Test>().configureEach { useKotest() testLogging { events = setOf(PASSED, SKIPPED, FAILED) } systemProperty("kotest.log.passed", "true") } - 在
src/test/resources/kotest.properties文件中添加:kotest.log.passed=true
配置后,Kotest会主动输出通过的测试信息,Gradle在
--info级别下就能显示。- 在
升级Kotest版本
确保使用Kotest 5.x及以上版本,旧版本存在与Gradle测试事件集成的兼容性问题,升级后可修复部分此类问题。
内容的提问来源于stack exchange,提问作者dominikbrandon
相关产品推荐
相关产品推荐

