POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Módulo 4: Descubriendo Dobles de Prueba (Mocks y Stubs)

Dobles de Prueba en PHPUnit: Aislar, controlar y acelerar pruebas con Stubs y Mocks

Publicado el 08/09/2025

Bienvenido al módulo que transformará la forma en que escribes pruebas unitarias. Hasta ahora hemos probado clases bastante independientes, pero en el mundo real las clases colaboran entre sí. Un servicio como UserService puede necesitar un EmailClient para enviar correos o un Logger para registrar actividad. ¿Cómo validar la lógica de UserService sin enviar un correo real ni escribir en un log cada vez que corre la prueba? La respuesta está en los Dobles de Prueba, clave para aislar y controlar el entorno de test.

Qué son los Dobles de Prueba

Un Doble de Prueba es cualquier objeto que simula a otro con fines de testing, igual que un doble de acción en el cine. Sustituimos las dependencias de la unidad bajo prueba para conseguir tres beneficios principales: 1 Aislamiento total de la unidad, haciendo que el test falle solo por errores propios y no de sus dependencias. 2 Control del entorno, forzando comportamientos específicos como un fallo de base de datos para cubrir todas las rutas del código. 3 Velocidad, reemplazando componentes lentos como llamadas de red por dobles en memoria que aceleran las suites de pruebas de forma drástica.

Con PHPUnit trabajarás sobre todo con Stubs y Mocks.

Stubs control de estado

Un Stub devuelve respuestas prefabricadas ante llamadas concretas. Su objetivo es suministrar a la unidad bajo prueba los datos necesarios para que siga su flujo con normalidad. Cuándo usar un Stub cuando necesitas simular el estado o la salida de una dependencia.

Ejemplo práctico Imagina una clase WelcomeGenerator que depende de un Translator para obtener el saludo correcto. En el test creas un Stub del contrato Translator y lo configuras para que su método getGreeting devuelva la cadena Hello. Luego inyectas ese Stub en WelcomeGenerator y verificas que el método greet concatena correctamente el saludo con el nombre, por ejemplo Hello, John. El test no depende de una implementación real de Translator y se mantiene estable y rápido.

Mocks verificación de interacciones

Un Mock añade una capacidad crucial además de devolver valores, permite verificar que se invocaron métodos concretos de la dependencia. Se usa para comprobar la interacción entre objetos. Cuándo usar un Mock cuando necesitas confirmar que tu clase llama a sus dependencias de la forma esperada.

Ejemplo práctico Supón una clase UserRegistrar que guarda un usuario y debe notificar al Logger. En el test creas un Mock de Logger y defines la expectativa de que el método log se invoque exactamente una vez con un mensaje determinado. Ejecutas register y, si log no se llama, se llama de más o con argumentos distintos, la prueba falla automáticamente. En PHPUnit verás constructos típicos como expects once para el número de llamadas, method para el método observado y with para validar argumentos.

Diferencias clave entre Stubs y Mocks

Propósito principal Stub proporciona respuestas prefabricadas y te ayuda a controlar el estado. Mock verifica interacciones y comportamiento. Enfoque del test Stub centra la prueba en el estado final de la unidad bajo prueba. Mock centra la prueba en la comunicación entre la unidad y su dependencia. Verificación Con Stub las aserciones suelen dirigirse al resultado de la unidad bajo prueba. Con Mock las expectativas forman parte de la aserción, por ejemplo que un método se invoque una vez con ciertos parámetros. Analogía Un Stub actúa como intérprete con guion fijo. Un Mock es como un intérprete supervisado por un director que evalúa si ejecutó las acciones correctas.

Otros dobles útiles Fakes y Spies

Fakes Implementaciones funcionales pero simplificadas frente a producción. Ejemplo una base de datos en memoria que reemplaza conexiones reales a MySQL o PostgreSQL para tests más rápidos y deterministas. Spies Dobles que registran lo ocurrido durante la ejecución y permiten aserciones posteriores sobre cómo fueron usados. En PHPUnit puedes obtener comportamientos de tipo Spy configurando Mocks con expectativas flexibles o inspeccionando invocaciones luego.

Siguientes pasos

Dominar Stubs y Mocks te acerca a pruebas verdaderamente unitarias, predecibles y veloces. A continuación podrás integrar cobertura de código, pipelines de CI CD y buenas prácticas para que tu suite sea un activo estratégico del proyecto. En Q2BSTUDIO impulsamos calidad desde el diseño con desarrollo de aplicaciones a medida y software a medida, automatización de pruebas y pipelines de entrega continua, combinando inteligencia artificial para generar datos sintéticos, detección de flujos frágiles y priorización de pruebas con agentes IA. Si quieres llevar esta visión a tus productos, descubre nuestro enfoque de desarrollo de aplicaciones a medida y cómo aplicamos inteligencia artificial en los ciclos de vida de software.

Sobre Q2BSTUDIO

Somos una empresa de desarrollo de software que crea soluciones robustas y escalables con foco en calidad, seguridad y rendimiento. Nuestro portafolio incluye software a medida, ia para empresas y agentes IA, ciberseguridad con prácticas de pentesting y hardening, servicios cloud aws y azure, servicios inteligencia de negocio con power bi y analítica avanzada, además de automatización de procesos y observabilidad. Diseñamos pruebas unitarias, de integración y end to end alineadas con tu arquitectura para que cada entrega en producción sea segura, repetible y predecible.

Palabras clave relacionadas que abordamos en nuestros proyectos aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi.

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio