jenkins gradle jacoco junit5

jenkins - Gradle Jacoco y JUnit5



(4)

Gracias, por lo que el truco ahora se ve así:

project.afterEvaluate { def junitPlatformTestTask = project.tasks.getByName(''junitPlatformTest'') // configure jacoco to analyze the junitPlatformTest task jacoco { // this tool version is compatible with toolVersion = "0.7.6.201602180812" applyTo junitPlatformTestTask } // create junit platform jacoco task project.task(type: JacocoReport, "junitPlatformJacocoReport", { sourceDirectories = files("./src/main") classDirectories = files("$buildDir/classes/main") executionData junitPlatformTestTask }) }

Acabamos de portar nuestras pruebas unitarias a JUnit5. Al darse cuenta de que esto es todavía una adopción temprana con pequeños consejos en google.

Lo más difícil fue obtener la cobertura del código jacoco para las pruebas Junit5 que utilizamos en jenkins. Ya que esto me tomó casi un día para darme cuenta, pensé que compartía. Sin embargo, si usted sabe de una solución mejor me gustaría saber!

buildscript { dependencies { // dependency needed to run junit 5 tests classpath ''org.junit.platform:junit-platform-gradle-plugin:1.0.0-M2'' } } // include the jacoco plugin plugins { id ''jacoco'' } dependencies { testCompile "org.junit.jupiter:junit-jupiter-api:5.0.0-M2" runtime "org.junit.jupiter:junit-jupiter-engine:5.0.0-M2" runtime "org.junit.vintage:junit-vintage-engine:4.12.0-M2" } apply plugin: ''org.junit.platform.gradle.plugin''

Entonces, el problema parece ser que junitPlatformTest, como se define en org.junit.platform.gradle.plugin, se define demasiado tarde en la fase del ciclo de vida de Gradle y, por lo tanto, se desconoce cuando se analiza el script.

Se necesita el siguiente truco para poder seguir definiendo una tarea de jacoco que observe la tarea junitPlatformTest.

tasks.whenTaskAdded { task -> if (task.name.equals(''junitPlatformTest'')) { System.out.println("ADDING TASK " + task.getName() + " to the project!") // configure jacoco to analyze the junitPlatformTest task jacoco { // this tool version is compatible with toolVersion = "0.7.6.201602180812" applyTo task } // create junit platform jacoco task project.task(type: JacocoReport, "junitPlatformJacocoReport", { sourceDirectories = files("./src/main") classDirectories = files("$buildDir/classes/main") executionData task }) } }

Finalmente es necesario configurar el complemento junitPlatform. El siguiente código permite la configuración de la línea de comandos de las etiquetas junit 5 que se ejecutarán: Puede ejecutar todas las pruebas con la etiqueta ''unit'' ejecutando:

gradle clean junitPlatformTest -PincludeTags=unit

Puede ejecutar todas las pruebas en las que faltan tanto la unidad como la etiqueta entera usando

gradle clean junitPlatformTest -PexcludeTags=unit,integ

Si no se proporcionan etiquetas, se ejecutarán todas las pruebas (por defecto).

junitPlatform { engines { include ''junit-jupiter'' include ''junit-vintage'' } reportsDir = file("$buildDir/test-results") tags { if (project.hasProperty(''includeTags'')) { for (String t : includeTags.split('','')) { include t } } if (project.hasProperty(''excludeTags'')) { for (String t : excludeTags.split('','')) { exclude t } } } enableStandardTestTask false }


Para obtener una referencia a la tarea junitPlatformTest , otra opción es implementar un bloque afterEvaluate en el proyecto como este:

afterEvaluate { def junitPlatformTestTask = tasks.getByName(''junitPlatformTest'') // do something with the junitPlatformTestTask }

Vea mis comentarios en GitHub para JUnit 5 para más ejemplos.


Solo necesita agregar @RunWith (JUnitPlatform.class) a su paquete

@RunWith(JUnitPlatform.class) public class ClassTest { }


También se puede resolver con inyección de agente directo:

subprojects { apply plugin: ''jacoco'' jacoco { toolVersion = "0.7.9" } configurations { testAgent { transitive = false } } dependencies { testAgent("org.jacoco:org.jacoco.agent:0.7.9:runtime") } tasks.withType(JavaExec) { if (it.name == ''junitPlatformTest'') { doFirst { jvmArgs "-javaagent:${configurations.testAgent.singleFile}=destfile=${project.buildDir.name}/jacoco/test.exec" } } } }

entonces el informe estará disponible con la tarea jacocoTestReport