12. Datos de prueba para integración

12.1 Introducción

Las pruebas de integración necesitan datos. Sin datos adecuados, los componentes no pueden ejecutar reglas reales, consultar dependencias, guardar resultados ni demostrar que colaboran correctamente.

Pero los datos de prueba también pueden convertirse en una fuente de problemas. Si son ambiguos, compartidos sin control o difíciles de recrear, las pruebas pueden fallar de manera impredecible.

En este tema veremos cómo diseñar y preparar datos de prueba para que las pruebas de integración sean claras, repetibles y fáciles de diagnosticar.

12.2 Qué son los datos de prueba

Los datos de prueba son los valores y registros que una prueba necesita para ejecutarse. Pueden existir antes de la prueba, crearse durante la ejecución o verificarse al final como resultado esperado.

En una prueba de integración, los datos pueden estar en distintos lugares:

  • Parámetros enviados a una operación.
  • Registros en una base de datos.
  • Archivos de entrada.
  • Mensajes en una cola.
  • Respuestas de un servicio simulado.
  • Configuraciones específicas del escenario.
Un dato de prueba no es solo una entrada. También puede ser el estado inicial que permite que una integración tenga sentido.

12.3 Por qué importan en integración

En pruebas unitarias, muchas veces se crean datos pequeños dentro de la misma prueba. En integración, los datos suelen atravesar varias partes del sistema y quedar guardados o transformados.

Por eso los datos importan para verificar:

  • Que los componentes reciban lo que esperan.
  • Que las reglas de negocio se apliquen con valores realesistas.
  • Que la persistencia guarde la información correcta.
  • Que las consultas encuentren los registros necesarios.
  • Que los mensajes o archivos tengan la estructura esperada.
  • Que los casos de error se puedan reproducir.

12.4 Datos mínimos necesarios

Una buena práctica es preparar solo los datos necesarios para el objetivo de la prueba. Si cargamos demasiados datos, la prueba puede volverse confusa y difícil de mantener.

Por ejemplo, para probar que se crea una orden de compra, tal vez solo necesitemos:

  • Un usuario existente.
  • Un producto activo.
  • Stock suficiente.
  • Una forma de pago válida o simulada.
  • Configuración de impuestos o descuentos si aplica al caso.

Si agregamos decenas de usuarios, productos y promociones que no participan en el caso, aumentamos el ruido sin aportar valor.

12.5 Datos representativos

Los datos deben parecerse a situaciones que el sistema puede encontrar. No hace falta copiar producción, pero sí conviene usar valores que representen casos reales del negocio.

Ejemplos de datos representativos:

  • Usuarios con distintos roles.
  • Productos activos, inactivos y sin stock.
  • Pedidos pendientes, pagados y cancelados.
  • Importes con decimales.
  • Fechas cercanas a vencimientos o cambios de período.
  • Direcciones con campos opcionales presentes y ausentes.

Los datos demasiado artificiales pueden ocultar defectos que aparecerían con datos más cercanos al uso real.

12.6 Datos para caminos exitosos

Los caminos exitosos verifican que una integración funcione cuando todo está preparado correctamente. Son importantes porque establecen la base esperada del comportamiento.

Un camino exitoso debe tener datos coherentes:

  • Entidades existentes cuando la operación las requiere.
  • Estados válidos para avanzar.
  • Relaciones completas entre registros.
  • Valores dentro de rangos permitidos.
  • Dependencias simuladas con respuestas correctas.

Por ejemplo, una compra exitosa necesita usuario válido, producto disponible, stock suficiente y respuesta aprobada del pago.

12.7 Datos para caminos negativos

Las pruebas de integración también deben cubrir situaciones donde el sistema rechaza una operación o maneja una falla. Para eso necesitamos datos negativos o inválidos.

Ejemplos:

  • Usuario inexistente.
  • Producto deshabilitado.
  • Stock insuficiente.
  • Correo duplicado.
  • Pago rechazado.
  • Archivo con columnas faltantes.
  • Mensaje con formato incorrecto.

Estos datos ayudan a verificar que la integración no deje estados inconsistentes cuando una operación falla.

12.8 Datos límite

Los datos límite son valores cercanos a una frontera importante. Son útiles porque muchos errores aparecen en esos bordes.

Ejemplos de datos límite:

  • Stock igual a la cantidad solicitada.
  • Stock una unidad menor que la cantidad solicitada.
  • Importe cero, mínimo permitido o máximo permitido.
  • Fecha exactamente en el vencimiento.
  • Texto con longitud máxima aceptada.
  • Lista vacía y lista con un solo elemento.

En integración, estos datos permiten comprobar que varios componentes interpretan el límite de la misma manera.

12.9 Datos semilla

Los datos semilla son datos base que se cargan antes de ejecutar pruebas. Pueden representar catálogos, roles, estados, configuraciones o entidades comunes.

Ejemplos:

  • Roles de usuario: administrador, vendedor, cliente.
  • Estados de pedido: pendiente, pagado, cancelado.
  • Tipos de documento.
  • Monedas disponibles.
  • Categorías de productos.

Los datos semilla deben ser estables y conocidos. Si cambian sin control, muchas pruebas pueden empezar a fallar.

12.10 Fixtures y fábricas de datos

En muchos proyectos se usan fixtures o fábricas para crear datos de prueba. Un fixture es un conjunto de datos predefinido. Una fábrica es una función o herramienta que genera datos con valores por defecto y permite modificar lo necesario.

Enfoque Ventaja Cuidado
Fixture fijo Es fácil de leer y repetir. Puede volverse rígido o demasiado compartido.
Fábrica de datos Permite crear datos específicos para cada prueba. Debe generar datos coherentes y comprensibles.
Datos creados en la prueba Hace explícito lo que necesita el caso. Puede generar repetición si no hay helpers adecuados.

12.11 Datos compartidos y datos propios

Una decisión importante es si las pruebas usarán datos compartidos o datos propios. Los datos compartidos pueden simplificar la preparación, pero también generan acoplamiento entre pruebas.

Los datos propios de cada prueba suelen ser más confiables porque:

  • La prueba controla exactamente lo que necesita.
  • No depende de cambios realizados por otras pruebas.
  • Se puede limpiar con mayor precisión.
  • El diagnóstico es más claro.

Los datos compartidos pueden usarse para catálogos estables, pero conviene evitar usarlos para entidades que se modifican durante la prueba.

12.12 Identificadores únicos

Cuando una prueba crea datos, es útil usar identificadores únicos. Esto evita choques con datos de otras pruebas o ejecuciones anteriores.

Ejemplos:

  • Correos como usuario-test-123@example.com.
  • Códigos de producto con prefijo de prueba.
  • Nombres de archivos temporales únicos.
  • Identificadores de operación para seguir logs.

Los identificadores únicos no reemplazan la limpieza, pero ayudan a reducir interferencias y facilitan investigar resultados.

12.13 Datos sensibles

Las pruebas no deberían usar datos personales reales, contraseñas reales, tarjetas reales ni información productiva sin protección. Si se necesitan datos parecidos a producción, deben ser ficticios o anonimizados.

Cuidados básicos:

  • No copiar bases productivas sin anonimizar.
  • No incluir secretos en fixtures.
  • No usar correos reales si la prueba puede enviar mensajes.
  • No usar números de tarjeta reales.
  • Limitar permisos de usuarios de prueba.

La calidad de una prueba no justifica poner en riesgo información sensible.

12.14 Limpieza de datos

Después de ejecutar una prueba, los datos creados o modificados deben limpiarse o aislarse. Si no, las pruebas futuras pueden recibir un ambiente contaminado.

Formas habituales de limpieza:

  • Revertir transacciones.
  • Eliminar registros creados por la prueba.
  • Recrear la base de datos antes de la suite.
  • Vaciar tablas temporales.
  • Borrar archivos generados.
  • Vaciar colas de prueba.

La estrategia elegida depende de la tecnología y del costo de preparar el ambiente.

12.15 Ejemplo: datos para crear una orden

Supongamos una prueba para verificar que una orden se crea y descuenta stock. Los datos podrían organizarse así:

Tipo de dato Ejemplo Uso en la prueba
Usuario Cliente activo. Permite crear la orden.
Producto Producto activo con precio definido. Permite calcular el total.
Stock 10 unidades disponibles. Permite descontar la cantidad comprada.
Pago simulado Respuesta aprobada. Permite completar el flujo exitoso.
Resultado esperado Orden creada y stock reducido. Permite verificar estado final.

12.16 Errores comunes con datos de prueba

Al trabajar con datos de prueba, conviene evitar:

  • Depender de datos cargados manualmente.
  • Usar datos compartidos que otras pruebas modifican.
  • No limpiar registros creados durante la ejecución.
  • Preparar datos excesivos y difíciles de entender.
  • Usar valores irreales que no representan reglas del negocio.
  • Olvidar casos negativos y límites.
  • Usar datos sensibles reales.

12.17 Qué debes recordar de este tema

  • Los datos de prueba son parte esencial de una prueba de integración.
  • Deben ser conocidos, repetibles, representativos y fáciles de limpiar.
  • Conviene preparar solo los datos necesarios para el objetivo de la prueba.
  • Los escenarios exitosos, negativos y límite requieren datos distintos.
  • Los datos compartidos deben usarse con cuidado para evitar acoplamiento entre pruebas.
  • No deben utilizarse datos sensibles reales en ambientes de prueba.

12.18 Conclusión

Los datos de prueba determinan en gran parte la confiabilidad de una prueba de integración. Una prueba puede estar bien escrita, pero fallar o perder valor si sus datos son inconsistentes, incompletos o impredecibles.

Preparar buenos datos permite ejecutar escenarios claros, verificar estados finales y diagnosticar fallas con mayor precisión.

En el próximo tema veremos cómo manejar estado inicial, limpieza y aislamiento entre pruebas, profundizando en uno de los aspectos más importantes para evitar pruebas inestables.