2. Objetivos de las pruebas de integración

2.1 Introducción

En el tema anterior vimos que las pruebas de integración verifican si varios componentes de software colaboran correctamente. Ahora nos enfocaremos en una pregunta clave: ¿para qué hacemos pruebas de integración?

Responder esta pregunta ayuda a diseñar mejores pruebas. Si no tenemos claro el objetivo, podemos terminar escribiendo pruebas demasiado amplias, lentas, frágiles o repetidas. Una buena prueba de integración debe buscar información concreta sobre la relación entre componentes.

El objetivo general es reducir el riesgo de que el sistema falle cuando sus partes se conectan. Para lograrlo, las pruebas de integración observan comunicación, datos, contratos, configuración, persistencia, errores y comportamiento conjunto.

2.2 Objetivo principal

El objetivo principal de una prueba de integración es comprobar que las partes conectadas del sistema funcionen correctamente como conjunto.

Una prueba de integración debe demostrar que la colaboración entre componentes produce el resultado esperado o revelar dónde esa colaboración falla.

Esto significa que la prueba no se limita a preguntar si una función individual devuelve un valor correcto. También verifica si ese valor se transmite bien, si otro componente lo interpreta correctamente y si el resultado final queda en el estado esperado.

2.3 Detectar errores de comunicación

Uno de los objetivos más importantes es comprobar que los componentes puedan comunicarse. En sistemas reales, la comunicación puede fallar por muchas razones:

  • La URL o ruta de un servicio está mal configurada.
  • Un puerto, credencial o token no corresponde al ambiente usado.
  • El componente llamado no está disponible.
  • La respuesta llega con un código, formato o encabezado inesperado.
  • Una llamada tarda más de lo permitido y genera un timeout.

Una prueba de integración bien diseñada debe revelar este tipo de problemas de forma clara. No alcanza con saber que “algo falló”; la evidencia debe ayudar a ubicar qué comunicación no funcionó y bajo qué condiciones.

2.4 Validar interfaces y contratos

Cuando dos componentes se conectan, existe un acuerdo entre ellos. Ese acuerdo puede ser formal, como una especificación de API, o informal, como una clase que espera recibir ciertos campos. A ese acuerdo lo llamamos contrato.

Una prueba de integración debe comprobar que ese contrato se respete:

  • El componente consumidor envía los datos esperados.
  • El componente productor responde con los campos acordados.
  • Los tipos de datos son correctos.
  • Los nombres de propiedades, parámetros o columnas coinciden.
  • Los valores obligatorios no se omiten.
  • Los cambios en una interfaz no rompen a otros componentes.

Muchos errores de integración nacen cuando una parte del sistema cambia y otra parte sigue esperando el comportamiento anterior.

2.5 Verificar el flujo de datos

Otro objetivo central es comprobar que los datos viajen correctamente a través de los componentes. Un dato puede ser válido al comienzo, pero deformarse o perderse durante el recorrido.

Por ejemplo, en una operación de compra puede ser necesario verificar que:

  • El identificador del producto recibido por el controlador llegue al servicio de compras.
  • La cantidad solicitada se use para descontar stock.
  • El precio consultado en la base de datos sea el mismo que se usa para calcular el total.
  • El total calculado se guarde en la orden.
  • El estado de la orden quede registrado como corresponde.

La prueba de integración observa el recorrido completo dentro del alcance definido. Esto permite encontrar errores que no se ven si se prueba cada operación por separado.

2.6 Comprobar persistencia y recuperación

Muchas integraciones incluyen una base de datos u otro mecanismo de almacenamiento. En esos casos, uno de los objetivos es verificar que el sistema pueda guardar información y luego recuperarla correctamente.

La prueba puede comprobar, por ejemplo:

  • Que se inserte un registro con los valores esperados.
  • Que una actualización modifique solo los campos correctos.
  • Que una eliminación lógica cambie el estado sin borrar datos necesarios.
  • Que una consulta devuelva información consistente.
  • Que las relaciones entre tablas o entidades se mantengan válidas.

Este objetivo es especialmente importante porque la persistencia suele ser compartida por varias funcionalidades. Un error en datos guardados puede afectar procesos posteriores.

2.7 Revisar configuración y ambiente

Una aplicación puede funcionar en la computadora de un desarrollador y fallar en un ambiente de pruebas por diferencias de configuración. Las pruebas de integración ayudan a detectar esas diferencias.

Algunos elementos que conviene validar son:

  • Variables de entorno.
  • Conexiones a bases de datos.
  • Rutas de archivos.
  • Credenciales de servicios.
  • Colas, tópicos o canales de mensajería.
  • Versiones de librerías, esquemas o servicios externos.

Este objetivo no significa probar toda la infraestructura en profundidad. Significa confirmar que las dependencias necesarias para la integración están disponibles y configuradas de forma coherente.

2.8 Evaluar manejo de errores

Una integración no solo debe funcionar cuando todo sale bien. También debe comportarse de manera controlada cuando algo falla.

Las pruebas de integración pueden verificar respuestas ante situaciones como:

  • Un servicio externo no responde.
  • La base de datos rechaza una operación.
  • Un mensaje llega con datos incompletos.
  • Una respuesta tiene un formato inválido.
  • Una operación tarda demasiado.
  • Una dependencia devuelve un error conocido.

El objetivo es comprobar que el sistema no falle de forma descontrolada, que informe el problema con claridad y que mantenga un estado consistente.

2.9 Confirmar reglas compartidas

En muchos sistemas, una regla de negocio no vive en un solo lugar. Puede involucrar validaciones en una capa, cálculos en otra, persistencia en otra y comunicación con otros servicios.

Por ejemplo, una regla puede indicar que un usuario no puede comprar más unidades que el stock disponible. Para integrarla correctamente, el sistema debe:

  • Recibir la cantidad solicitada.
  • Consultar el stock actual.
  • Comparar ambos valores.
  • Rechazar la compra si no hay stock suficiente.
  • No crear una orden inválida.
  • No descontar stock cuando la compra fue rechazada.

Una prueba de integración puede verificar que todas esas decisiones coordinadas se cumplan como una única conducta observable.

2.10 Reducir riesgos antes de pruebas más amplias

Las pruebas de integración permiten encontrar defectos antes de llegar a pruebas de sistema o end-to-end. Esto es valioso porque una prueba más amplia puede fallar por muchas razones y tardar más en diagnosticar el problema.

Si las integraciones principales ya fueron verificadas, las pruebas de niveles superiores parten de una base más confiable. Esto no elimina todos los errores, pero reduce el ruido y ayuda a que cada nivel de prueba cumpla mejor su función.

Idea clave: una buena suite de integración disminuye la incertidumbre sobre las conexiones críticas del sistema.

2.11 Dar confianza para realizar cambios

Otro objetivo importante es permitir que el equipo modifique el sistema con menor temor a romper conexiones existentes. Cuando una prueba de integración cubre una colaboración crítica, puede detectar regresiones después de cambios en código, consultas, configuraciones o contratos.

Por ejemplo, si se cambia la forma de calcular descuentos, una prueba de integración puede confirmar que el total actualizado sigue guardándose correctamente en la orden y que el módulo de facturación recibe el importe esperado.

Este objetivo es especialmente útil en sistemas que evolucionan con frecuencia, donde los componentes se modifican, se reemplazan o se conectan con nuevas dependencias.

2.12 Ayudar al diagnóstico

Una prueba de integración también debe aportar evidencia útil cuando falla. El objetivo no es solo marcar una prueba como fallida, sino facilitar la investigación.

Una buena prueba ayuda a responder:

  • ¿Qué componentes participaron?
  • ¿Qué datos de entrada se usaron?
  • ¿Qué resultado se esperaba?
  • ¿Qué resultado se obtuvo?
  • ¿Dónde parece haberse roto la colaboración?
  • ¿El problema fue de datos, contrato, conexión, configuración o lógica compartida?

Cuanto más clara sea la prueba, menos tiempo necesitará el equipo para entender y corregir el defecto.

2.13 Objetivos que no conviene mezclar

Un error común es intentar que una sola prueba de integración verifique demasiadas cosas. Eso puede hacer que la prueba sea difícil de mantener y que sus fallas sean confusas.

Conviene evitar que una misma prueba intente cubrir al mismo tiempo:

  • Muchos flujos de negocio distintos.
  • Demasiados casos de datos no relacionados.
  • Validaciones visuales de interfaz gráfica.
  • Pruebas de rendimiento profundas.
  • Reglas internas que ya están mejor cubiertas por pruebas unitarias.

Una prueba de integración debe tener un propósito claro. Si una prueba falla, debería ser posible entender qué colaboración se estaba verificando.

2.14 Ejemplo de objetivos en una funcionalidad

Supongamos una funcionalidad para registrar un nuevo usuario. Algunos objetivos de integración podrían ser:

Objetivo Qué se verifica
Guardar usuario El controlador, el servicio y el repositorio crean el registro esperado en la base de datos.
Evitar duplicados Si el correo ya existe, la operación se rechaza y no se crea otro usuario.
Enviar notificación Después del registro correcto, se solicita el envío del mensaje de bienvenida.
Manejar error externo Si el servicio de notificaciones falla, el sistema responde de forma controlada.

Cada objetivo puede convertirse en una prueba o en un pequeño grupo de pruebas. Lo importante es que cada una tenga un propósito verificable.

2.15 Qué debes recordar de este tema

  • El objetivo principal es verificar que los componentes colaboren correctamente.
  • Las pruebas de integración detectan errores de comunicación, datos, contratos, configuración y persistencia.
  • También deben comprobar el manejo de errores y la consistencia del estado del sistema.
  • Una buena prueba de integración reduce riesgos antes de pruebas más amplias.
  • Las pruebas deben tener objetivos claros para que sus fallas sean fáciles de interpretar.
  • No conviene mezclar demasiados propósitos en una sola prueba.

2.16 Conclusión

Las pruebas de integración no se escriben solamente para aumentar la cantidad de pruebas de un proyecto. Se escriben para obtener confianza sobre puntos concretos donde varios componentes deben colaborar.

Cuando sus objetivos están bien definidos, estas pruebas ayudan a encontrar defectos importantes, documentan acuerdos entre partes del sistema y permiten que el equipo evolucione el software con mayor seguridad.

En el próximo tema compararemos con más detalle las pruebas unitarias, de integración, de sistema y end-to-end para entender qué aporta cada nivel y cómo se complementan.