Cuando dos o más módulos se integran, pueden aparecer errores que no se detectan al probar cada parte de forma aislada. Esto ocurre porque la integración agrega comunicación, formatos de datos, configuraciones, dependencias, estados compartidos y tiempos de respuesta.
Conocer los errores típicos ayuda a diseñar mejores pruebas. Si sabemos qué suele fallar, podemos preparar escenarios que busquen esos problemas de manera intencional.
En este tema revisaremos fallas comunes al integrar módulos y veremos cómo pueden manifestarse en una aplicación real.
Un error de contrato ocurre cuando dos módulos no coinciden en el acuerdo que permite comunicarse. El contrato puede estar definido por parámetros, campos, tipos de datos, códigos de respuesta, nombres de columnas, mensajes o reglas de validación.
Ejemplos frecuentes:
userId, pero el otro espera usuarioId.null en un caso que antes no lo hacía.Estos errores son especialmente peligrosos porque cada módulo puede parecer correcto por separado, pero fallar al conectarse.
Aunque los módulos intercambien los campos correctos, los datos pueden llegar con un formato inesperado. Esto ocurre mucho con fechas, importes, identificadores, números decimales, listas y estructuras anidadas.
Algunos ejemplos:
04/05/2026, pero el otro módulo espera 2026-05-04.null."true" en lugar de true.Las pruebas de integración deben incluir datos representativos para revelar estas diferencias antes de que afecten operaciones reales.
Una integración puede fallar aunque el código esté bien, simplemente porque el ambiente está mal configurado. Este tipo de error es muy común al pasar de desarrollo local a pruebas, staging o producción.
Ejemplos habituales:
Las pruebas de integración ayudan a comprobar que las dependencias necesarias están disponibles y correctamente conectadas.
Un módulo puede necesitar una base de datos, una API, una cola, un servidor de archivos o un servicio interno. Si esa dependencia no está disponible, la integración falla.
La dependencia puede no estar disponible por varias razones:
Una buena prueba no solo detecta que la dependencia falta; también permite verificar si el sistema informa el problema de forma clara y mantiene un estado consistente.
Algunas integraciones dependen de que las operaciones ocurran en cierto orden. Si el orden cambia o se ejecuta una parte antes de tiempo, el resultado puede ser incorrecto.
Por ejemplo:
Estos errores suelen aparecer en flujos con varios pasos, especialmente si hay procesos asíncronos o eventos.
Cuando una integración usa una base de datos o almacenamiento, pueden aparecer problemas al guardar, actualizar o consultar información.
Ejemplos comunes:
Por eso muchas pruebas de integración no se limitan a observar la respuesta inmediata. También revisan el estado final que quedó guardado.
En operaciones complejas, varios cambios deben ocurrir como una unidad. Si una parte se completa y otra falla, el sistema puede quedar inconsistente.
Ejemplo: una compra crea una orden, descuenta stock y registra un pago. Si se descuenta stock pero la orden no se crea, el sistema queda en un estado incorrecto.
Las pruebas de integración deben verificar qué ocurre cuando una operación intermedia falla:
Los datos faltantes son una causa frecuente de fallas de integración. Un módulo puede asumir que un campo siempre existe, pero otro módulo puede omitirlo en ciertos casos.
Ejemplos:
Una prueba de integración debe incluir casos con datos completos, datos opcionales ausentes y datos inválidos para comprobar que el sistema responde correctamente.
Dos módulos pueden usar la misma palabra con significados distintos. Esto genera errores difíciles de detectar porque no siempre se manifiestan como una excepción técnica.
Por ejemplo:
Las pruebas de integración deben validar reglas compartidas con ejemplos concretos, especialmente cuando intervienen conceptos importantes del negocio.
Una integración puede funcionar en condiciones ideales, pero fallar cuando una dependencia responde lento. Esto puede producir timeouts, reintentos innecesarios, operaciones duplicadas o respuestas incompletas.
Conviene probar situaciones como:
No se trata todavía de hacer pruebas de rendimiento profundas, sino de comprobar que la integración se comporta bien frente a demoras razonables o esperadas.
Las integraciones asíncronas agregan desafíos porque el resultado no aparece de inmediato. Un componente publica un mensaje o evento y otro lo procesa más tarde.
Errores típicos en este tipo de integración:
Estas pruebas necesitan mecanismos claros para esperar el resultado y evitar dependencias frágiles basadas solo en pausas arbitrarias.
La concurrencia aparece cuando varias operaciones ocurren al mismo tiempo o casi al mismo tiempo. En integración, esto puede generar problemas de estado compartido.
Ejemplos:
No todas las pruebas de integración deben cubrir concurrencia, pero los flujos críticos con datos compartidos merecen especial atención.
Las pruebas de integración suelen usar datos, archivos, bases de datos o colas. Si una prueba deja residuos, puede afectar a otra prueba posterior.
Señales de este problema:
El aislamiento y la limpieza son fundamentales para que las pruebas de integración sean confiables.
Supongamos que un sistema registra una venta y envía una notificación. En una prueba de integración podrían aparecer varias fallas:
| Síntoma | Posible causa |
|---|---|
| La venta no se guarda. | Error de conexión o esquema incorrecto en la base de datos. |
| El total guardado es incorrecto. | Diferente interpretación de descuentos o impuestos. |
| La notificación no se envía. | Evento publicado en la cola incorrecta o consumidor detenido. |
| La prueba falla solo algunas veces. | Proceso asíncrono, datos compartidos o falta de limpieza entre pruebas. |
Los errores de integración suelen aparecer en los puntos donde los componentes se encuentran: interfaces, datos, contratos, configuración, persistencia y dependencias. Por eso son errores que pueden pasar inadvertidos si solo se prueban piezas aisladas.
El objetivo de las pruebas de integración es exponer esos problemas con escenarios claros y evidencia útil para diagnosticarlos.
En el próximo tema estudiaremos con más detalle las interfaces, los contratos y las responsabilidades entre componentes, porque allí se definen muchas de las reglas que una integración debe respetar.