Objetivo del tema
Aprenderas a integrar marcos de pruebas populares con Gradle, ejecutar suites automatizadas, interpretar reportes y complementar el pipeline con cobertura de codigo.
Al finalizar, podras definir dependencias de prueba, personalizar el ciclo gradle test
, publicar reportes reutilizables y forzar umbrales de calidad con JaCoCo.
Gradle incluye soporte nativo para JUnit 5 y permite cambiar a TestNG u otros runners con una configuracion minima. Las pruebas viven en src/test/java
o src/test/kotlin
, separadas del codigo productivo.
plugins {
id 'java'
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.10.2'
}
test {
useJUnitPlatform()
testLogging {
events 'passed', 'skipped', 'failed'
exceptionFormat 'full'
}
}
Para TestNG, reemplaza useJUnitPlatform()
por useTestNG()
y agrega testImplementation 'org.testng:testng:7.9.0'
. Puedes filtrar grupos con options.includeGroups('regression')
.
package com.ejemplo;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
class CalculadoraTest {
@ParameterizedTest
@ValueSource(ints = {2, 4, 6})
@DisplayName("Los numeros pares generan resultado verdadero")
void esPar(int numero) {
Assertions.assertTrue(numero % 2 == 0);
}
}
Incorporar casos parametrizados o pruebas anidadas ayuda a aumentar la cobertura sin duplicar codigo.
gradle test
)La tarea test
compila las clases de prueba, ejecuta los casos y produce reportes en build/reports/tests
. Puedes ajustar memoria, paralelismo y filtros para obtener retroalimentacion rapida.
test {
maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2).coerceAtLeast(1)
maxHeapSize = '512m'
failFast = true
systemProperties['env'] = System.getProperty('env', 'local')
testLogging {
events 'failed', 'standardError'
showStandardStreams = project.hasProperty('debugTests')
}
reports {
junitXml.required.set(true)
html.required.set(true)
}
filter {
includeTestsMatching 'com.ejemplo.*'
excludeTestsMatching '*Integracion'
}
}
Comandos utiles:
gradle test --tests "com.ejemplo.CalculadoraTest"
para ejecutar un conjunto puntual.gradle test --continuous
recompila y relanza cuando cambian clases o pruebas../gradlew clean test
con el wrapper para asegurar la version correcta de Gradle.Gradle genera reportes HTML y XML que pueden subirse a Jenkins, GitLab CI, GitHub Actions u otras plataformas. El informe HTML se encuentra en build/reports/tests/test/index.html
e incluye resumen, tiempo de ejecucion y stacktraces.
build/test-results/test
; herramientas de CI los transforman en estadisticas historicas.reports.html.outputLocation.set(layout.buildDirectory.dir("reports/tests/ui"))
.gradle test aggregateTestReports
con plugins como report-aggregation
para consolidar resultados.Compartir los reportes en la intranet del equipo evita reproducir fallas manualmente y documenta la estabilidad del build.
El plugin jacoco
genera reportes de cobertura y permite definir umbrales minimos obligatorios. Tambien se integra con pipelines para bloquear despliegues cuando la cobertura baja.
plugins {
id 'java'
id 'jacoco'
}
jacoco {
toolVersion = '0.8.11'
}
jacocoTestReport {
dependsOn test
reports {
xml.required.set(true)
html.required.set(true)
csv.required.set(false)
}
}
jacocoTestCoverageVerification {
dependsOn jacocoTestReport
violationRules {
rule {
limit {
counter = 'LINE'
minimum = 0.75
}
}
}
}
check.dependsOn jacocoTestCoverageVerification
// Ejecutar cobertura
// gradle clean test jacocoTestReport jacocoTestCoverageVerification
El reporte HTML queda en build/reports/jacoco/test/html/index.html
y el XML se usa para publicar resultados en herramientas externas (por ejemplo SonarQube). Define reglas adicionales para metodos o ramas segun las necesidades del equipo.
Las pruebas automatizadas en Gradle refuerzan la calidad continua: combina JUnit o TestNG para ejecutar suites, personaliza la tarea test
para obtener feedback veloz, publica reportes visibles y controla la cobertura con JaCoCo para prevenir regresiones.