8 - Testing e integración continua

Objetivo del tema

En este tema aprenderás a ejecutar pruebas con Apache Maven, integrar frameworks de testing, generar reportes y conectar el flujo de construcción con herramientas de integración continua como Jenkins o GitHub Actions para automatizar pipelines.

8.1 Ejecución de pruebas con Maven (mvn test)

El objetivo test del ciclo de vida por defecto ejecuta las pruebas unitarias utilizando maven-surefire-plugin. Invoca la fase con el comando:

mvn test
  • Surefire busca clases que sigan patrones como *Test.java y ejecuta los frameworks configurados.
  • Para ejecutar un método específico utiliza -Dtest=ClaseDePrueba#metodo.
  • Agrega parámetros como -Dsurefire.failIfNoSpecifiedTests=false para personalizar el comportamiento del plugin.

8.2 Integración con frameworks de pruebas

Maven soporta una amplia variedad de frameworks unitarios y de integración. Basta con agregar las dependencias correspondientes.

<dependencies>
  <dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.10.2</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>5.11.0</version>
    <scope>test</scope>
  </dependency>
</dependencies>
  • JUnit 5 proporciona una API moderna para escribir pruebas.
  • TestNG ofrece anotaciones adicionales y soporte paralelo avanzado.
  • Herramientas de mocking como Mockito facilitan aislar dependencias externas durante las pruebas.

8.3 Generación de reportes de pruebas

Los plugins de testing generan archivos XML y HTML con resultados que pueden consultarse localmente o cargarse en servidores de CI.

  • maven-surefire-plugin almacena resultados en target/surefire-reports en formato XML y HTML.
  • Para cobertura, jacoco-maven-plugin genera reportes en target/site/jacoco.
  • Integra reportes con maven-surefire-report-plugin para incorporarlos al sitio del proyecto.

Conservar reportes en el pipeline CI facilita detectar regresiones y compartir resultados con el equipo.

8.4 Integración con Jenkins, GitHub Actions u otros CI/CD

Maven se integra en la mayoría de plataformas de CI/CD. En Jenkins, puedes crear pipelines que ejecuten mvn clean verify, publiquen resultados y suban artefactos al repositorio.

# .github/workflows/maven.yml
name: Maven CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 17
      - name: Build with Maven
        run: mvn -B clean verify
      - name: Archive test reports
        uses: actions/upload-artifact@v4
        with:
          name: surefire-reports
          path: target/surefire-reports/
  • En Jenkins, las etapas se definen en un Jenkinsfile, incluyendo mvn test, escaneo de calidad y despliegues.
  • GitLab CI, Azure Pipelines y otros servicios ofrecen plantillas que llaman a Maven con comandos similares.
  • Asegúrate de configurar credenciales en variables de entorno o settings.xml para publicar artefactos durante el pipeline.

8.5 Estrategias de automatización con Maven

Automatizar la ejecución de pruebas y despliegues reduce errores humanos y acelera entregas.

  • Combina mvn clean verify con validaciones estáticas (por ejemplo, mvn spotbugs:check) para asegurar calidad antes de fusionar cambios.
  • Utiliza perfiles dedicados a CI que activen verificaciones adicionales, como cobertura obligatoria o pruebas de integración.
  • Programa pipelines nocturnos que ejecuten pruebas completas, generen sitios con mvn site y publiquen reportes centralizados.

Un pipeline bien diseñado garantiza que cada cambio pase por pruebas consistentes y que los artefactos promovidos a producción sean confiables.

Resumen didáctico

Maven facilita la automatización del testing y la integración continua gracias a su ciclo de vida declarativo y a la amplia compatibilidad con herramientas CI/CD. Ejecutar mvn test, integrar frameworks como JUnit o TestNG, generar reportes y conectarlos con pipelines repetibles permite detectar problemas temprano y mantener la calidad del software.