Un stub devuelve respuestas preparadas para que el código bajo prueba pueda seguir. Un mock además registra las interacciones para que puedas comprobar que ocurrieron, verificando comportamiento en vez de estado. Un fake es una implementación ligera que funciona de verdad, como un repositorio en memoria. Usa dependencias reales cuando el riesgo es la propia integración, y dobles de test cuando la dependencia es lenta, cara o difícil de forzar a un estado concreto.
Por qué lo preguntan los entrevistadores
Los términos se usan de forma intercambiable, así que definirlos con precisión indica profundidad. Más importante aún, el entrevistador quiere tu criterio sobre cuándo un doble es mala idea, porque abusar de los mocks produce tests que pasan tan felices mientras el sistema está roto. Nombrar dependencias reales en contenedores para los tests de integración demuestra que conoces la opción intermedia moderna en vez de tratarlo como todo mockeado o nada.
Cómo estructurar tu respuesta
- Define los tres con nitidez, una línea cada uno.
- Explica la verificación de estado frente a la de interacción.
- Da el caso en el que la dependencia real es la opción correcta.
- Advierte de abusar de los mocks y de los tests que solo testean los mocks.
- Menciona los contenedores para dependencias de integración realistas.
Ejemplo de respuesta
Un stub es pasivo, se limita a devolver lo que le dijiste que devolviera para que el código pueda seguir. Un mock es un stub que además recuerda lo que le pasó, así que puedes comprobar que se llamó al servicio de pagos exactamente una vez con estos argumentos. Un fake es una implementación real pero simplificada, como una versión en memoria de un repositorio, que se comporta bien pero no es de calidad de producción. La distinción que importa en la práctica es que los stubs y los fakes sirven para verificar estado, comprobando el resultado, mientras que los mocks sirven para verificar interacción, comprobando la conversación. Yo me inclino por lo primero, porque comprobar interacciones acopla el test a detalles de implementación, y luego una refactorización rompe cien tests sin que haya cambiado ni un comportamiento. Donde uso dependencias reales es allí donde el riesgo es la integración. Si la pregunta es si nuestra consulta funciona de verdad contra Postgres, una base de datos mockeada no responde nada, así que ejecuto la de verdad en un contenedor. Esa es ahora mi opción por defecto para la capa de integración, porque los contenedores lo abarataron. Mockeo los servicios de terceros que no controlo, y respaldo eso con tests de contrato programados contra su sandbox.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Qué señal indica que una suite de tests abusa de los mocks?
- ¿Cómo testearías el manejo de errores de un tercero al que no puedes forzar a fallar?
- ¿Cuándo es un spy la herramienta correcta en vez de un mock completo?
Más preguntas para Ingeniero de QA
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas