es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en la declaración de dependsOn en ProjectB. Dado que ProjectB depende de ProjectD, al ejecutar las pruebas para ProjectB, también deberían incluirse las pruebas para ProjectD. Sin embargo, como ProjectD no tiene su propia tarea de verificación, se está omitiendo al ejecutar gradle check.

    Para solucionar esto, puede agregar una tarea de verificación al archivo build.gradle.kts de ProjectD:

    tasks.register("check") {
        dependsOn("test")
    }
    

    Esto creará una tarea de verificación para ProjectD que depende de la tarea test existente. Con este cambio, cuando ejecute gradle check, las pruebas de ProjectD ahora deberían incluirse y ejecutarse junto con las pruebas de ProjectB.

Comments are closed.