Gradle multiproyecto solo ejecuta pruebas para un proyecto.
Tengo un proyecto gradle de varios proyectos con cuatro módulos de Kotlin Multiplatform, dos de los cuales tienen pruebas. Cuando ejecuto gradle check
, si una de las pruebas de uno de los módulos falla, las pruebas del otro módulo no se ejecutan.
Estoy utilizando Gradle 7.3, Java 17 y kotlin.test
. Las pruebas para ambos proyectos se encuentran en el conjunto de origen commonTest
. También probé con Gradle 7.1 y Java 11 con el mismo comportamiento.
Extracto de settings.gradle.kts
:
include(":ProjectA")
include(":ProjectB") // B tiene pruebas y depende de D, sus pruebas se ejecutan
include(":ProjectC")
include(":ProjectD") // D tiene pruebas pero no se ejecutan
Extracto de ProjectB 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"))
}
}
Del resultado de gradle check
puedo ver que :ProjectB:allTests
se ejecuta y falla pero nunca se ejecuta :ProjectB:allTests
. Este es un extracto del resultado de gradle:
> Task :ProjectB:desktopTest
<p>com.mylibrary.AppTest[desktop] > helloTestNg[desktop] FAILED
java.lang.AssertionError at AppTest.kt:8</p>
<p>2 tests completed, 1 failed
There were failing tests</p>
> Task :ProjectB:allTests FAILED
FAILURE: Build failed with an exception.
Si ejecuto gradle -p ProjectD check
las pruebas para ProjectD se ejecutan correctamente.
davy.ai
El problema parece estar en la declaración de
dependsOn
enProjectB
. Dado queProjectB
depende deProjectD
, al ejecutar las pruebas paraProjectB
, también deberían incluirse las pruebas paraProjectD
. Sin embargo, comoProjectD
no tiene su propia tarea de verificación, se está omitiendo al ejecutargradle check
.Para solucionar esto, puede agregar una tarea de verificación al archivo build.gradle.kts de
ProjectD
:Esto creará una tarea de verificación para
ProjectD
que depende de la tareatest
existente. Con este cambio, cuando ejecutegradle check
, las pruebas deProjectD
ahora deberían incluirse y ejecutarse junto con las pruebas deProjectB
.