Glosario · Fundamentos de testing
Prueba de integración
En inglés: Integration test
También llamado: pruebas de integración, test de integración, tests de integración, testing de integración
Definición
Una prueba que comprueba si dos o más componentes, como un servicio y su base de datos o dos APIs, funcionan bien juntos a través de sus interfaces reales.
Una prueba de integración verifica las conexiones entre componentes, no la lógica dentro de uno solo. Usa implementaciones reales en al menos una frontera: un repositorio contra una base de datos real, un servicio que llama a la API de otro servicio, un productor de mensajes y su consumidor. Son las pruebas que detectan SQL incorrecto, serializaciones erróneas, configuración que falta y contratos que no coinciden, cosas que las pruebas unitarias con mocks pasarían por alto.
Ejemplo
Un OrderRepository tiene pruebas unitarias con mocks, y pasan. La prueba de integración lo ejecuta contra una instancia real de PostgreSQL arrancada en un contenedor:
- Arrancar PostgreSQL con Testcontainers y aplicar las migraciones del esquema.
- Guardar un pedido con tres líneas a través del repositorio.
- Volver a cargarlo por ID y comprobar que los totales y las líneas coinciden.
- Consultar pedidos por rango de fechas y comprobar que los límites son inclusivos.
Ejecutada contra una base de datos real, esta prueba puede revelar una errata en el nombre de una columna, una migración que nunca se aplicó, un error en la conversión de zonas horarias o una consulta que funciona en una base de datos en memoria pero no en PostgreSQL.
Integración vs. unitaria vs. end-to-end
| Unitaria | Integración | End-to-end | |
|---|---|---|---|
| Alcance | Una función o clase | Unos pocos componentes y sus interfaces | El sistema completo, como un usuario |
| Dependencias | Sustituidas por dobles | Reales en la frontera que se prueba | Todas reales |
| Velocidad | Milisegundos | Segundos | De segundos a minutos |
| Un fallo apunta a | Una pieza de lógica concreta | Una interfaz concreta | Algún punto del sistema |
Enfoques
- Las pruebas de integración acotadas comprueban una frontera cada vez (servicio más base de datos) con todo lo demás simulado con stubs. Son rápidas y precisas, y la mayoría de los equipos quiere muchas.
- Las pruebas de integración amplias arrancan varios servicios reales a la vez. Dan más confianza, pero son más lentas y más difíciles de diagnosticar.
- Los manuales clásicos también describen la integración big-bang, descendente (top-down) y ascendente (bottom-up), que describen el orden en que se combinan los módulos. En las entrevistas conviene conocer los términos, pero los equipos modernos integran sobre todo de forma continua.
Errores comunes
- Compartir una única base de datos de larga vida entre pruebas y desarrolladores, lo que hace que los resultados dependan de datos residuales. Da a cada ejecución una instancia limpia y desechable.
- Hacer mock justo de la frontera que querías probar, lo que convierte una prueba de integración de nuevo en una prueba unitaria.