25. Diseño de casos de prueba de integración

25.1 Introducción

Una prueba de integración útil no nace por ejecutar varios componentes juntos sin criterio. Necesita un diseño claro: qué colaboración se quiere verificar, qué datos se usarán, qué dependencias participan y qué resultado demostrará que la integración funciona.

Diseñar casos de prueba de integración ayuda a evitar pruebas confusas, demasiado amplias o difíciles de diagnosticar. También permite que el equipo entienda qué riesgo cubre cada prueba.

En este tema veremos cómo estructurar un caso de prueba de integración desde su objetivo hasta sus verificaciones finales.

25.2 Qué es un caso de prueba de integración

Un caso de prueba de integración describe una situación donde dos o más componentes colaboran y deben producir un resultado esperado.

Debe indicar:

  • Qué componentes participan.
  • Qué escenario se ejecuta.
  • Qué datos iniciales se necesitan.
  • Qué dependencias son reales o simuladas.
  • Qué acción dispara la integración.
  • Qué resultado se espera.
  • Qué estado final debe quedar.
Un buen caso de integración explica qué colaboración se prueba y cómo sabremos si esa colaboración funcionó.

25.3 Definir el objetivo

El primer paso es escribir un objetivo claro. El objetivo debe indicar la colaboración que se quiere verificar.

Ejemplos de objetivos claros:

  • Verificar que crear una orden guarde sus ítems en la base de datos.
  • Verificar que una orden confirmada publique un evento.
  • Verificar que un pago rechazado no descuente stock.
  • Verificar que un archivo CSV válido cree clientes en el sistema.
  • Verificar que un servicio maneje timeout del proveedor externo.

Un objetivo como “probar compras” es demasiado amplio. No indica qué integración se quiere validar.

25.4 Definir el alcance

El alcance define qué componentes participan en la prueba. Debe quedar claro qué se incluye y qué se deja fuera.

Por ejemplo, para una compra podríamos incluir:

  • Servicio de compras.
  • Repositorio de órdenes.
  • Base de datos de prueba.
  • Proveedor de pagos simulado.
  • Cola de eventos real de prueba.

Definir el alcance evita confundir una prueba de integración específica con una prueba end-to-end o de sistema completo.

25.5 Identificar dependencias

Cada caso debe identificar qué dependencias necesita y cómo serán tratadas.

Conviene responder:

  • ¿Qué dependencias son reales?
  • ¿Qué dependencias están simuladas?
  • ¿Qué datos o respuestas debe devolver cada dependencia?
  • ¿Qué configuración necesita el ambiente?
  • ¿Qué dependencia podría hacer la prueba inestable?

Una dependencia no documentada puede convertirse en una causa oculta de fallas.

25.6 Preparar datos iniciales

Los datos iniciales deben ser suficientes para ejecutar el caso y deben estar bajo control de la prueba.

Un buen diseño indica:

  • Qué datos deben existir antes de comenzar.
  • Cómo se crean esos datos.
  • Qué valores son importantes para el escenario.
  • Qué datos no deberían existir.
  • Cómo se limpiarán al finalizar.

Los datos deben ser fáciles de entender. Si el caso necesita muchos datos, conviene revisar si el escenario está demasiado mezclado.

25.7 Definir la acción

La acción es el disparador de la integración. Puede ser una llamada a un servicio, una solicitud a un controlador, la llegada de un mensaje, la carga de un archivo o la ejecución de un proceso.

Ejemplos:

  • Enviar solicitud para crear una orden.
  • Ejecutar método de importación de clientes.
  • Publicar evento de pago aprobado.
  • Procesar archivo ubicado en carpeta de entrada.
  • Invocar servicio con proveedor externo simulado en timeout.

La acción debe ser única y claramente relacionada con el objetivo del caso.

25.8 Definir verificaciones

Una prueba de integración puede verificar más de un resultado, pero todas las verificaciones deben estar relacionadas con el objetivo.

Puede verificar:

  • Respuesta inmediata.
  • Registros guardados.
  • Estados modificados.
  • Mensajes publicados.
  • Archivos generados.
  • Llamadas realizadas a una dependencia simulada.
  • Ausencia de efectos que no deberían ocurrir.

En integración, muchas veces el estado final es tan importante como la respuesta.

25.9 Resultado esperado

El resultado esperado debe ser concreto. No alcanza con decir “debe funcionar”. Debe indicar qué observaremos para decidir si la prueba pasó.

Ejemplos:

  • La orden queda guardada con estado pendiente.
  • El stock del producto se reduce de 10 a 8.
  • Se publica un evento orden_creada con el identificador correcto.
  • No se crea ninguna orden cuando el pago es rechazado.
  • El archivo de salida contiene 3 registros y encabezados correctos.

Un resultado esperado claro es indispensable para interpretar una falla.

25.10 Casos positivos

Los casos positivos verifican que la integración funcione cuando las condiciones son válidas.

Ejemplos:

  • Crear cliente con datos válidos.
  • Confirmar compra con stock suficiente y pago aprobado.
  • Importar archivo con formato correcto.
  • Consumir evento válido.
  • Consultar servicio interno disponible.

Estos casos establecen el comportamiento esperado del camino principal.

25.11 Casos negativos

Los casos negativos verifican cómo se comporta la integración cuando algo no permite completar la operación.

Ejemplos:

  • Crear cliente con documento duplicado.
  • Confirmar compra sin stock suficiente.
  • Procesar archivo con columnas faltantes.
  • Recibir evento inválido.
  • Proveedor externo rechaza la solicitud.

En estos casos, es fundamental verificar que no queden cambios parciales incorrectos.

25.12 Casos de error técnico

Además de errores de negocio, las integraciones pueden fallar por problemas técnicos.

Casos importantes:

  • Timeout de una dependencia.
  • Base de datos no disponible.
  • Credencial inválida.
  • Archivo sin permisos de lectura.
  • Cola de mensajes no disponible.
  • Respuesta externa con formato inesperado.

Estos casos ayudan a evaluar robustez y diagnóstico.

25.13 Nombrar casos de prueba

El nombre de un caso debe comunicar su intención. Un buen nombre permite entender qué colaboración se verifica sin leer todo el contenido.

Ejemplos de nombres útiles:

  • Crear orden válida debe guardar orden e ítems.
  • Pago rechazado no debe descontar stock.
  • Evento de orden creada debe generar notificación pendiente.
  • Archivo CSV sin columna email debe rechazar importación.
  • Timeout de pagos debe dejar orden pendiente.

Los nombres genéricos dificultan el mantenimiento de la suite.

25.14 Plantilla de caso de prueba

Una plantilla simple puede ayudar a diseñar casos consistentes:

Objetivo Qué colaboración se quiere verificar.
Componentes Partes reales que participan en la prueba.
Dependencias simuladas Qué se reemplaza y qué respuesta dará.
Datos iniciales Estado necesario antes de ejecutar.
Acción Operación que dispara la integración.
Resultado esperado Respuesta, estado final y efectos esperados.
Limpieza Cómo se eliminan datos o recursos creados.

25.15 Ejemplo completo: compra aprobada

Un caso diseñado para compra aprobada podría verse así:

Objetivo Verificar que una compra aprobada cree orden, descuente stock y registre pago.
Componentes Servicio de compras, repositorio, base de datos de prueba.
Dependencia simulada Proveedor de pagos devuelve aprobado.
Datos iniciales Cliente activo, producto con 10 unidades, precio definido.
Acción Confirmar compra de 2 unidades.
Resultado esperado Orden pagada, stock en 8 unidades, pago registrado.
Limpieza Eliminar orden, pago y producto creados para la prueba.

25.16 Errores comunes

Al diseñar casos de integración, suelen aparecer errores como:

  • No definir el objetivo del caso.
  • Incluir demasiados flujos en una sola prueba.
  • No aclarar qué dependencias son simuladas.
  • Usar datos iniciales ambiguos o compartidos sin control.
  • Verificar solo la respuesta y no el estado final.
  • No probar errores importantes.
  • No definir limpieza.

25.17 Lista de verificación

Antes de implementar o ejecutar un caso de integración, conviene revisar:

  • ¿El objetivo es claro?
  • ¿El alcance está definido?
  • ¿Los datos iniciales son conocidos y controlados?
  • ¿Las dependencias reales y simuladas están identificadas?
  • ¿La acción principal está bien definida?
  • ¿El resultado esperado es observable?
  • ¿La prueba limpia lo que crea?

25.18 Qué debes recordar de este tema

  • Un caso de prueba de integración debe verificar una colaboración concreta.
  • El objetivo, el alcance y las dependencias deben quedar claros.
  • Los datos iniciales deben ser suficientes, conocidos y controlados.
  • El resultado esperado debe incluir respuesta y estado final cuando corresponda.
  • Los casos negativos y técnicos son tan importantes como los positivos.
  • Una buena limpieza evita interferencias entre pruebas.

25.19 Conclusión

Diseñar bien un caso de prueba de integración permite obtener información precisa sobre la colaboración entre componentes. Una prueba clara reduce el tiempo de diagnóstico y evita que la suite se vuelva un conjunto de ejecuciones difíciles de interpretar.

El diseño debe responder siempre qué se prueba, con qué datos, contra qué dependencias y qué resultado demostrará que la integración funcionó.

En el próximo tema veremos pruebas positivas, negativas y casos límite en integración.