7. Límites del sistema: qué incluir y qué dejar fuera de una prueba de integración

7.1 Introducción

Una de las decisiones más importantes al diseñar una prueba de integración es definir su alcance. Es decir: qué componentes participarán en la prueba, qué dependencias serán reales, qué dependencias se reemplazarán y qué resultado se observará.

Si incluimos muy pocas partes, la prueba puede parecerse demasiado a una prueba unitaria y aportar poca confianza sobre la integración. Si incluimos demasiadas, puede volverse lenta, frágil y difícil de diagnosticar.

En este tema aprenderemos a reconocer los límites del sistema para decidir qué incluir y qué dejar fuera de una prueba de integración.

7.2 Qué significa definir un límite

Definir un límite significa marcar hasta dónde llega la prueba. Dentro del límite quedan los componentes reales que queremos verificar trabajando juntos. Fuera del límite quedan dependencias que no se probarán en ese caso o que se reemplazarán por dobles de prueba, configuraciones controladas o servicios simulados.

El límite de una prueba de integración define qué colaboración queremos comprobar y qué partes no forman parte del objetivo de esa prueba.

Por ejemplo, si probamos la integración entre servicio de usuarios y base de datos, el proveedor externo de correo puede quedar fuera del límite y reemplazarse por una simulación.

7.3 Por qué el alcance importa

El alcance afecta directamente la utilidad de la prueba. Una prueba de integración debe equilibrar confianza, velocidad, estabilidad y facilidad de diagnóstico.

Un alcance bien definido permite:

  • Saber qué componentes se están verificando.
  • Preparar datos adecuados.
  • Evitar dependencias innecesarias.
  • Interpretar mejor una falla.
  • Mantener la prueba más estable.
  • Reducir duplicación con otros niveles de prueba.

Cuando el alcance es confuso, una prueba puede fallar por causas que no pertenecen al objetivo que queríamos validar.

7.4 Componentes que suelen incluirse

En una prueba de integración se suelen incluir componentes cuya colaboración queremos verificar. Algunos ejemplos son:

  • Controlador y servicio.
  • Servicio y repositorio.
  • Repositorio y base de datos.
  • Servicio de negocio y cliente de una API.
  • Productor y consumidor de mensajes.
  • Proceso que genera un archivo y proceso que lo lee.
  • Módulo de autenticación y módulo de autorización.

La decisión debe partir de la pregunta: ¿qué colaboración queremos comprobar en este caso?

7.5 Dependencias que pueden quedar fuera

No todas las dependencias deben participar en cada prueba de integración. Algunas pueden quedar fuera porque no son el objetivo de la prueba, porque son costosas, inestables o difíciles de controlar.

Ejemplos de dependencias que a veces se reemplazan:

  • Servicios de pago reales.
  • Proveedores de correo o SMS.
  • APIs externas de terceros.
  • Sistemas bancarios o gubernamentales.
  • Servicios con costo por uso.
  • Dependencias que no están disponibles en ambientes de prueba.

Dejar una dependencia fuera no significa ignorarla para siempre. Significa que esa prueba concreta no tiene como objetivo verificarla.

7.6 Componentes reales y simulados

Una prueba de integración puede combinar componentes reales con componentes simulados. Esto permite concentrarse en la colaboración que interesa sin depender de todo el sistema completo.

Decisión Ventaja Riesgo
Usar dependencia real Aumenta el realismo de la prueba. Puede hacerla más lenta o inestable.
Simular dependencia Permite controlar respuestas y errores. Puede ocultar diferencias con el comportamiento real.
Usar base de datos de prueba Verifica persistencia real sin afectar producción. Requiere limpieza y preparación de datos.
Usar servicio externo real Verifica la integración de punta a punta con ese proveedor. Puede depender de red, costo, permisos y disponibilidad.

7.7 Criterios para incluir un componente

Conviene incluir un componente real cuando su comportamiento es parte del riesgo que queremos cubrir. Algunas preguntas útiles son:

  • ¿Este componente forma parte de la colaboración que queremos verificar?
  • ¿Sus contratos o datos son fuente frecuente de errores?
  • ¿La funcionalidad depende de su comportamiento real?
  • ¿Es posible prepararlo y limpiarlo de forma controlada?
  • ¿La prueba seguirá siendo suficientemente rápida y estable?
  • ¿Si falla, podremos diagnosticar la causa con claridad?

Si la respuesta a varias de estas preguntas es afirmativa, probablemente tenga sentido incluirlo.

7.8 Criterios para dejar un componente fuera

Conviene dejar fuera o simular una dependencia cuando su participación no aporta valor suficiente para el objetivo de la prueba.

Puede ser razonable dejar fuera un componente cuando:

  • No es parte del comportamiento que queremos comprobar.
  • Hace que la prueba sea demasiado lenta.
  • Su disponibilidad no está bajo control del equipo.
  • Genera costos reales o efectos secundarios peligrosos.
  • Requiere datos difíciles de preparar.
  • Ya está cubierto por otras pruebas más adecuadas.

Esta decisión debe documentarse en la prueba o en la estrategia de testing para evitar falsas expectativas sobre lo que se está verificando.

7.9 El límite no siempre coincide con la arquitectura

A veces se piensa que una prueba de integración siempre debe cubrir capas completas o servicios completos. No necesariamente. El límite de la prueba depende del objetivo.

Por ejemplo, en una arquitectura con controlador, servicio, repositorio y base de datos, podemos tener distintas pruebas:

  • Controlador y servicio, simulando repositorio.
  • Servicio y repositorio, usando base de datos real de prueba.
  • Repositorio y base de datos, verificando consultas específicas.
  • Controlador, servicio, repositorio y base de datos, para un flujo crítico.

Todas pueden ser pruebas de integración, pero cada una tiene un alcance distinto.

7.10 Qué observar dentro del límite

Definir el límite también implica definir qué resultado vamos a observar. Una prueba de integración puede verificar:

  • La respuesta devuelta por una operación.
  • Los datos guardados en una base de datos.
  • Un mensaje publicado en una cola.
  • Un archivo generado.
  • Una llamada realizada a una dependencia simulada.
  • El estado final de varios componentes conectados.

Observar solo la respuesta puede ser insuficiente. Muchas integraciones producen efectos importantes que no se ven directamente en el valor devuelto.

7.11 Qué evitar en el alcance

Un alcance demasiado amplio puede convertir la prueba de integración en una prueba difícil de mantener. Conviene evitar:

  • Incluir servicios externos reales sin necesidad.
  • Depender de datos compartidos por otros equipos o pruebas.
  • Usar ambientes inestables para pruebas repetibles.
  • Mezclar validaciones de interfaz gráfica con validaciones de integración interna.
  • Probar muchos flujos no relacionados en una sola prueba.
  • Repetir exactamente lo que ya cubre una prueba end-to-end.

Una prueba de integración debe ser suficientemente realista para detectar errores de colaboración, pero no tan amplia que pierda claridad.

7.12 Ejemplo: registro de usuario

Supongamos que queremos probar el registro de un usuario. Distintos límites generan distintas pruebas:

Alcance Qué incluye Qué deja fuera
Servicio y base de datos Servicio de usuarios, repositorio y base de datos de prueba. Controlador, interfaz gráfica y correo.
Controlador a base de datos Controlador, servicio, repositorio y base de datos. Proveedor real de correo.
Registro con notificación simulada Controlador, servicio, base de datos y servicio de correo simulado. Envío real del correo.
Flujo completo real Aplicación completa y proveedor de correo real. Poco o nada dentro del flujo.

El último caso puede parecer más completo, pero tal vez corresponda más a una prueba de sistema o end-to-end que a una prueba de integración cotidiana.

7.13 Riesgo de límites demasiado pequeños

Si el límite es demasiado pequeño, la prueba puede perder valor como prueba de integración. Por ejemplo, si probamos un servicio simulando todas sus dependencias, quizá estemos verificando solo lógica interna y no integración real.

Señales de un límite demasiado pequeño:

  • Todas las dependencias están reemplazadas por simulaciones.
  • No se verifica ningún recurso real.
  • La prueba solo comprueba una condición interna.
  • La prueba no puede detectar errores de configuración, persistencia o contrato.

En esos casos, tal vez la prueba sea válida, pero debería clasificarse como unitaria o de componente aislado, no como integración.

7.14 Riesgo de límites demasiado grandes

Si el límite es demasiado grande, la prueba puede convertirse en una prueba lenta y difícil de diagnosticar. Un fallo puede deberse a muchas causas posibles.

Señales de un límite demasiado grande:

  • La prueba tarda mucho en ejecutarse.
  • Falla por servicios que no son parte del objetivo.
  • Requiere demasiada preparación manual.
  • Depende de datos compartidos o inestables.
  • El error obtenido no indica claramente qué colaboración falló.

En estos casos, conviene dividir el escenario en pruebas de integración más específicas y dejar los flujos completos para pruebas de sistema o end-to-end.

7.15 Cómo documentar el alcance

Una prueba clara debería expresar su alcance en el nombre, en la estructura o en la documentación. Por ejemplo:

  • “crear usuario debe persistirlo en la base de datos”.
  • “confirmar compra debe publicar evento de orden creada”.
  • “rechazar pago externo debe dejar la orden en estado pendiente”.
  • “importar archivo válido debe crear registros de clientes”.

Estos nombres indican qué colaboración se verifica y qué resultado importa. Eso ayuda a mantener la suite entendible a medida que crece.

7.16 Qué debes recordar de este tema

  • El límite define qué componentes participan en una prueba de integración.
  • Un buen alcance equilibra confianza, velocidad, estabilidad y diagnóstico.
  • No todas las dependencias deben ser reales en todas las pruebas.
  • Simular una dependencia puede ser correcto si esa dependencia no es el objetivo de la prueba.
  • Un límite demasiado pequeño puede no probar integración real.
  • Un límite demasiado grande puede generar pruebas lentas, frágiles y difíciles de interpretar.

7.17 Conclusión

Definir límites es una habilidad esencial para escribir buenas pruebas de integración. El valor de la prueba depende de incluir las partes correctas y dejar fuera aquello que no aporta al objetivo del caso.

Una prueba de integración útil no intenta probar todo. Prueba una colaboración concreta con suficiente realismo y con un resultado observable que permita detectar fallas importantes.

En el próximo tema veremos distintas estrategias de integración, como incremental, big bang, top-down y bottom-up.