Gradle multi-project 只对一个项目执行测试

Gradle multi-project only executes tests for one project

我有一个多项目 gradle 构建,其中包含四个 Kotlin Multiplatform 模块,其中两个有测试。当我 运行 gradle check 时,如果其中一个模块的任何测试失败,则不会执行另一个模块的测试。

我正在使用 Gradle 7.3、Java 17 和 kotlin.test。两个项目的测试都位于 commonTest 源集中。还尝试了具有相同行为的 Gradle 7.1 和 Java 11。

摘自settings.gradle.kts

include(":ProjectA")
include(":ProjectB") // B has tests and depends on D, its tests are run
include(":ProjectC")
include(":ProjectD") // D has tests but are not run

摘自项目 B build.gradle.kts

 sourceSets {
        val commonMain by getting {
            dependencies {
                api(compose.runtime)
                api(compose.foundation)
                api(compose.material)
                implementation(project(":ProjectD"))
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
            }
        }

gradle check 的输出中我可以看到 :ProjectB:allTests 被执行但失败了,但 :ProjectB:allTests 从未被执行。这是 gradle 输出的摘录:

> Task :ProjectB:desktopTest

com.mylibrary.AppTest[desktop] > helloTestNg[desktop] FAILED
    java.lang.AssertionError at AppTest.kt:8

2 tests completed, 1 failed
There were failing tests

> Task :ProjectB:allTests FAILED

FAILURE: Build failed with an exception.

如果我这样做 gradle -p ProjectD check ProjectD 测试会正确执行。

默认 Gradle 行为是在任何任务失败时停止,并且 Gradle 将失败的测试视为未通过检查任务。因此,如果某个项目中的任何测试失败,则将不会执行尚未执行的项目的测试。

--continue 在这种情况下很有用,它会更改默认行为并强制 Gradle 继续执行所有任务,即使其中一些任务失败了。

这个问题解释的很好https://youtrack.jetbrains.com/issue/KT-49858p