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

Aprende a usar Dobles de Prueba (stubs, mocks, fakes y spies) para aislar y acelerar pruebas unitarias en PHP con PHPUnit, evitando fallos y efectos.

8 sept 2025 • 4 min read • Q2BSTUDIO Team

Inteligencia-Artificial-

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.

A BREAK?

Play for a moment before you go

OUR SERVICES

How we can help you

Artificial intelligence

AI agents, chatbots, and intelligent assistants that automate tasks and serve your customers 24/7 to improve the efficiency of your business.

More info

Software Development

Web, mobile, and desktop applications, intranets, e-commerce, SaaS, and management platforms designed for your company's specific needs.

More info

Cloud services

Migration, infrastructure, managed hosting, high availability, and security on Microsoft Azure and Amazon Web Services to help your business scale without limits.

More info

Cybersecurity and pentesting

Security audits, penetration testing and protection of applications, data and infrastructure on-premise and cloud, with ethical hacking and regulatory compliance.

More info

Business Intelligence

Dashboards and data analysis with Power BI: we integrate your sources, design dashboards and KPIs and turn your data into decisions.

More info

Process automation

We automate repetitive tasks and connect your applications with n8n, Power Automate, Make, and RPA, eliminating manual work and increasing productivity.

More info

Training for Companies

We train your teams in technology with criteria: web development, databases, Git, best practices and security, automation with n8n, artificial intelligence for companies and creation of AI solutions with Azure AI Foundry.

More info

Code Auditing

We audit the code that you, your team or an AI create: we tell you what is good and what to improve, we secure it and make it ready for production, web or app.

More info

AI Image Generation

We create for you the images that your business needs with artificial intelligence: product, networks, advertising, illustration and avatars. You tell us what you want and we deliver it ready to use.

More info

AI Video Generation

We create videos with artificial intelligence for you: promotional, networking, virtual presenters, dubbing and animations. You tell us the idea and we will deliver it assembled and ready to publish.

More info

AI Conversational Avatars

We create conversational avatars with AI – digital humans with a face and voice – that serve your customers and teams with the knowledge of your company, on your website, interactive monitors, WhatsApp or Teams.

More info

Online Marketing and AI

Google Ads, Meta Ads, LinkedIn Ads and AI Engine Positioning (GEO/AEO): we attract customers and make your brand appear where they search for you, also on ChatGPT, Gemini and Perplexity.

More info

Do you have a project in mind?

Tell us your vision and we'll turn it into a software solution. Whatever the scope, we make your idea real.