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
- Dependencia en Maven:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
- Dependencia en Gradle:
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2'
Estructura de un Test
Un test en JUnit se compone de:
- Setup: Inicializar recursos necesarios.
- Ejecución: Llamar al método que se quiere probar.
- Verificación: Asegurarse de que el resultado sea el esperado.
- 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ón | Descripción |
|---|---|
@Test | Indica que un método es un caso de prueba. |
@BeforeEach | Código que se ejecuta antes de cada test. |
@AfterEach | Código que se ejecuta después de cada test. |
@BeforeAll | Código que se ejecuta una vez antes de todos los tests. |
@AfterAll | Código que se ejecuta una vez después de todos los tests. |
@Disabled | Desactiva temporalmente un test. |
@ParameterizedTest | Permite 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