stub vs mock vs fake vs spy
Stub: devuelve valores predefinidos, sin verificación. Mock: verifica que ocurrieron llamadas específicas. Fake: una implementación real y liviana que funciona. Spy: envuelve la implementación real y registra llamadas sin reemplazarla.
stub
Devuelve valores hardcodeados o predefinidos. Reemplaza una dependencia real para que el test pueda ejecutarse, pero no registra ni verifica nada sobre cómo fue llamado.
"const stub = { getUser: () => ({ id: 1, name: 'Test' }) };"
mock
Un doble de prueba que también verifica el comportamiento. Después de que el test se ejecuta, se verifica que se hicieron llamadas específicas con argumentos específicos. Falla el test si tu código no interactuó con él como se esperaba.
"expect(mockEmailService.send).toHaveBeenCalledWith('welcome', user.email);"
fake
Una implementación funcional y liviana de una dependencia real. Una base de datos en memoria es un fake clásico. Se comporta correctamente pero es más simple y rápida que la implementación real.
"class FakeUserRepository implements UserRepository { private users = new Map(); ... }"
spy
Envuelve la implementación real en lugar de reemplazarla. El código real sigue ejecutándose, pero el spy registra todas las llamadas para que puedas inspeccionarlas después.
"const spy = jest.spyOn(emailService, 'send'); // real method still runs"
Tip para entrevistas
La mayoría de los developers usa "mock" para referirse a cualquier doble de prueba. Está bien en la conversación. Pero si un entrevistador pregunta específicamente la diferencia, la distinción clave es: los stubs proveen datos, los mocks verifican comportamiento.
Otras comparativas
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis