Test Unitarios en Java

Published by

on

Proyecto-testing-java-draft-code-by-ivan-vazquez

Introducción a los Test Unitarios

Los test unitarios son una técnica de pruebas de software que permite validar que las diferentes unidades o componentes individuales de un programa funcionan como se espera. En Java, los test unitarios suelen escribirse usando frameworks como JUnit o TestNG.

¿Qué es una Unidad de Código?

Una unidad se refiere a la porción más pequeña de código que se puede probar de manera aislada. Por lo general, una unidad es:

  • Una función o método.
  • Una clase con métodos públicos y privados.

Ventajas de los Test Unitarios

  • Prevención de errores: Identifican fallos en etapas tempranas del desarrollo.
  • Facilitan el mantenimiento: El código bien probado permite realizar cambios con mayor confianza.
  • Documentación viva: Los test explican el propósito y uso del código.
  • Automatización: Reducen esfuerzo manual gracias a herramientas de automatización.

JUnit: Herramienta Popular

JUnit es un framework estándar para pruebas en Java. Algunas características clave incluyen:

  • Anotaciones para facilitar la configuración y ejecución de pruebas.
  • Integración con IDEs como IntelliJ IDEA y Eclipse.
  • Compatibilidad con herramientas de automatización (Maven, Gradle).

Configuración de JUnit

  1. Dependencia en Maven:
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>
  1. Dependencia en Gradle:
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2'

Estructura de un Test

Un test en JUnit se compone de:

  1. Setup: Inicializar recursos necesarios.
  2. Ejecución: Llamar al método que se quiere probar.
  3. Verificación: Asegurarse de que el resultado sea el esperado.
  4. Teardown (opcional): Liberar recursos.

Ejemplo Básico:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class CalculadoraTest {

    @Test
    public void testSuma() {
        // Setup
        Calculadora calculadora = new Calculadora();

        // Ejecución
        int resultado = calculadora.suma(2, 3);

        // Verificación
        assertEquals(5, resultado);
    }
}

Principales Anotaciones de JUnit

AnotaciónDescripción
@TestIndica que un método es un caso de prueba.
@BeforeEachCódigo que se ejecuta antes de cada test.
@AfterEachCódigo que se ejecuta después de cada test.
@BeforeAllCódigo que se ejecuta una vez antes de todos los tests.
@AfterAllCódigo que se ejecuta una vez después de todos los tests.
@DisabledDesactiva temporalmente un test.
@ParameterizedTestPermite ejecutar un test con diferentes conjuntos de datos.

Buenas Prácticas

  • Nombrar los tests descriptivamente: Usa nombres como deberiaRetornarResultadoCorrecto.
  • Prueba casos límite: Considera valores extremos o inesperados.
  • Evita dependencias externas: Simula interacciones con recursos externos (bases de datos, APIs).
  • Usa Mocks y Stubs: Con frameworks como Mockito para aislar el código en pruebas complejas.

Ejemplo Avanzado con Mockito

import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.*;

public class ServicioTest {

    @Test
    public void testObtenerDatos() {
        // Mock del repositorio
        Repositorio repositorioMock = mock(Repositorio.class);
        when(repositorioMock.obtenerDatos()).thenReturn("datos simulados");

        // Servicio bajo prueba
        Servicio servicio = new Servicio(repositorioMock);
        String resultado = servicio.obtenerDatos();

        // Verificación
        assertEquals("datos simulados", resultado);
    }
}

Herramientas Adicionales

  • Mockito: Framework para crear mocks y stubs.
  • AssertJ: Biblioteca para expresiones de aserción fluida.
  • Hamcrest: Aserciones avanzadas con matcher.

Recursos

Con estos apuntes tendrás una base sólida para implementar y dominar los test unitarios en Java. ¡Practica y mejora tu calidad de código!

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.