La integración continua (CI) es una práctica de desarrollo de software en la que los desarrolladores integran su código en un repositorio compartido varias veces al día. Cada integración es verificada por una construcción automatizada (incluyendo pruebas) para detectar errores lo antes posible. JUnit, como framework de pruebas unitarias, juega un papel crucial en este proceso al permitir la ejecución automática de pruebas cada vez que se realiza una integración.
Conceptos Clave de Integración Continua
- Repositorio de Código Compartido: Un lugar central donde todos los desarrolladores suben su código.
- Construcción Automatizada: Un proceso que compila el código y ejecuta pruebas automáticamente.
- Pruebas Automatizadas: Pruebas que se ejecutan sin intervención manual, asegurando que el código funciona como se espera.
- Feedback Rápido: Notificaciones inmediatas sobre el estado de la construcción y las pruebas.
Configurando Integración Continua con JUnit
Paso 1: Configurar un Sistema de CI
Existen varias herramientas populares para la integración continua, como Jenkins, Travis CI, CircleCI, y GitHub Actions. A continuación, se muestra un ejemplo de configuración básica usando GitHub Actions.
Paso 2: Crear un Archivo de Configuración para GitHub Actions
-
Crear el Directorio de Workflow:
- En tu repositorio, crea un directorio
.github/workflows
.
- En tu repositorio, crea un directorio
-
Crear el Archivo de Workflow:
- Dentro del directorio
workflows
, crea un archivoci.yml
.
- Dentro del directorio
Ejemplo de Archivo ci.yml
name: Java CI with Maven on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up JDK 11 uses: actions/setup-java@v2 with: java-version: '11' - name: Build with Maven run: mvn clean install - name: Run tests run: mvn test
Explicación del Archivo
- name: Nombre del workflow.
- on: Define los eventos que desencadenan el workflow (push y pull_request en la rama
main
). - jobs: Define los trabajos que se ejecutarán.
- build: Nombre del trabajo.
- runs-on: Define el sistema operativo en el que se ejecutará el trabajo (ubuntu-latest).
- steps: Lista de pasos a ejecutar.
- Checkout repository: Usa la acción
actions/checkout@v2
para clonar el repositorio. - Set up JDK 11: Usa la acción
actions/setup-java@v2
para configurar JDK 11. - Build with Maven: Ejecuta
mvn clean install
para compilar el proyecto. - Run tests: Ejecuta
mvn test
para correr las pruebas de JUnit.
- Checkout repository: Usa la acción
Paso 3: Verificar la Configuración
- Commit y Push: Realiza un commit y push de los cambios al repositorio.
- Verificar en GitHub: Ve a la pestaña "Actions" en tu repositorio de GitHub para ver el estado del workflow.
Ejercicio Práctico
Ejercicio 1: Configurar CI con GitHub Actions
- Objetivo: Configurar un workflow de CI en GitHub Actions para un proyecto Java con pruebas JUnit.
- Pasos:
- Crea un repositorio en GitHub.
- Añade un proyecto Java con pruebas JUnit.
- Configura el archivo
ci.yml
como se muestra en el ejemplo. - Realiza un commit y push de los cambios.
- Verifica que el workflow se ejecute correctamente en la pestaña "Actions".
Solución
-
Crear el Repositorio:
- Ve a GitHub y crea un nuevo repositorio.
-
Añadir Proyecto Java:
- Crea un proyecto Java con Maven y añade algunas pruebas JUnit.
-
Configurar
ci.yml
:- Sigue los pasos descritos anteriormente para crear y configurar el archivo
ci.yml
.
- Sigue los pasos descritos anteriormente para crear y configurar el archivo
-
Commit y Push:
- Realiza un commit y push de los cambios.
-
Verificar en GitHub:
- Ve a la pestaña "Actions" y verifica que el workflow se ejecute correctamente.
Conclusión
La integración continua es una práctica esencial en el desarrollo de software moderno, y JUnit es una herramienta poderosa para asegurar la calidad del código a través de pruebas automatizadas. Configurar un sistema de CI con herramientas como GitHub Actions permite a los desarrolladores recibir feedback rápido sobre el estado de su código, facilitando la detección y corrección de errores de manera eficiente. Con esta configuración, estarás mejor preparado para mantener un código de alta calidad y un proceso de desarrollo ágil.
Curso de JUnit
Módulo 1: Introducción a JUnit
Módulo 2: Anotaciones Básicas de JUnit
- Entendiendo @Test
- Usando @Before y @After
- Usando @BeforeClass y @AfterClass
- Ignorando Tests con @Ignore
Módulo 3: Aserciones en JUnit
Módulo 4: Tests Parametrizados
- Introducción a los Tests Parametrizados
- Creando Tests Parametrizados
- Usando @ParameterizedTest
- Tests Parametrizados Personalizados
Módulo 5: Suites de Tests
Módulo 6: Mocking con JUnit
Módulo 7: Características Avanzadas de JUnit
Módulo 8: Mejores Prácticas y Consejos
- Escribiendo Tests Efectivos
- Organizando el Código de Tests
- Desarrollo Guiado por Tests (TDD)
- Integración Continua con JUnit