Simulación de dependencias con PHPUnit
Cree objetos simulados para aislar unidades y controlar el comportamiento de los colaboradores.
Simulación de dependencias con PHPUnit es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
¿Por qué usar mocks?
El mocking sustituye una dependencia real (base de datos, servicio de correo electrónico o cliente HTTP) por un objeto falso controlable, de modo que las pruebas sean rápidas, aisladas y deterministas.
createMock()
createMock(ClassName::class) crea un objeto mock que implementa todos los métodos de la clase y devuelve null de forma predeterminada.
<?php
$mailer = $this->createMock(Mailer::class);
// All methods return null by defaultEsperar llamadas a métodos
Use expects() con matchers como once(), exactly(3), never() y any() para verificar que los métodos se llamen el número correcto de veces.
<?php
$mailer->expects($this->once())
->method("send")
->with("user@example.com", "Welcome!");Configurar valores de retorno
Use willReturn() para hacer que un método mock devuelva un valor específico.
<?php
$repo = $this->createMock(UserRepository::class);
$repo->method("find")
->willReturn(new User(id: 1, name: "Alice"));willReturnMap()
Devuelva valores diferentes según el argumento usando willReturnMap().
<?php
$cache->method("get")
->willReturnMap([
["key:1", "value-one"],
["key:2", "value-two"],
]);willThrowException()
Haga que un mock lance una excepción para probar las rutas de gestión de errores.
<?php
$repo->method("find")
->willThrowException(new DatabaseException("Connection lost"));Matchers de argumentos
Use matchers de argumentos en with() para realizar aserciones flexibles: $this->anything(), $this->equalTo(), $this->isInstanceOf().
<?php
$logger->expects($this->once())
->method("log")
->with($this->stringContains("error"));Mocks parciales (getMockBuilder)
Use getMockBuilder() con onlyMethods() para simular métodos específicos y conservar las implementaciones reales de los demás.
<?php
$svc = $this->getMockBuilder(EmailService::class)
->onlyMethods(["sendRaw"])
->getMock();
$svc->method("sendRaw")->willReturn(true);Patrón de spy
Un spy registra todas las llamadas para que pueda hacer aserciones sobre ellas después de la ejecución; los mocks de PHPUnit pueden actuar como spies usando any() y capturando los argumentos.
Inyectar mocks
Pase los mocks a la clase que se está probando mediante inyección en el constructor: es el patrón estándar para escribir código comprobable y desacoplado.
<?php
$service = new NotificationService($mailer, $logger);
$service->notify($user);Mocks de interfaces frente a clases concretas
Se prefiere simular interfaces: los detalles de implementación no se filtran a la prueba, y las pruebas siguen siendo válidas aunque cambie la implementación real.
Resumen
Use createMock() para aislar dependencias. Use expects()->method()->with()->willReturn() para establecer expectativas y stubs. Inyecte los mocks mediante el constructor.
Comprobación rápida
¿Qué método hace que un mock devuelva un valor específico?
Preguntas frecuentes
¿La lección «Simulación de dependencias con PHPUnit» es gratis?
Sí — el texto completo de «Simulación de dependencias con PHPUnit» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Simulación de dependencias con PHPUnit»?
Cree objetos simulados para aislar unidades y controlar el comportamiento de los colaboradores. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Simulación de dependencias con PHPUnit»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Configuración de PHPUnit y primera prueba
- Aserciones y métodos de prueba
- Proveedores de datos para pruebas parametrizadas
- Simulación de dependencias con PHPUnit