Un stub renvoie des réponses préparées pour que le code testé puisse continuer. Un mock enregistre en plus les interactions pour que vous puissiez affirmer qu'elles ont eu lieu, en vérifiant le comportement plutôt que l'état. Un fake est une implémentation légère mais fonctionnelle, par exemple un dépôt en mémoire. Utilisez de vraies dépendances quand l'intégration elle-même est le risque, et des doublures quand la dépendance est lente, coûteuse ou difficile à forcer dans un état donné.
Pourquoi les recruteurs posent cette question
Les termes sont employés de façon interchangeable, donc des définitions précises signalent de la profondeur. Plus important, le recruteur veut votre jugement sur les cas où une doublure est le mauvais choix, puisque l'excès de mocks produit des tests qui passent joyeusement pendant que le système est cassé. Citer les vraies dépendances en conteneur pour les tests d'intégration montre que vous connaissez l'option intermédiaire moderne plutôt que de raisonner en tout mocker ou rien.
Comment structurer votre réponse
- Définissez les trois nettement, une ligne chacun.
- Expliquez la vérification d'état face à la vérification d'interaction.
- Donnez le cas où une vraie dépendance est le bon choix.
- Mettez en garde contre l'excès de mocks et les tests qui ne testent que les mocks.
- Mentionnez les conteneurs pour des dépendances d'intégration réalistes.
Exemple de réponse
Un stub est passif, il se contente de renvoyer ce que vous lui avez dit de renvoyer pour que le code continue. Un mock est un stub qui se souvient en plus de ce qui lui est arrivé, pour que vous puissiez affirmer que le service de paiement a été appelé exactement une fois avec ces arguments. Un fake est une implémentation réelle mais simplifiée, comme une version en mémoire d'un dépôt, qui se comporte correctement mais n'est pas de qualité production. La distinction qui compte en pratique, c'est que les stubs et les fakes soutiennent la vérification d'état, on affirme sur le résultat, alors que les mocks soutiennent la vérification d'interaction, on affirme sur la conversation. Je penche pour la première, parce qu'affirmer sur les interactions couple le test aux détails d'implémentation, et un refactoring casse alors cent tests sans qu'un seul comportement ait changé. Là où j'utilise de vraies dépendances, c'est partout où l'intégration est le risque. Si la question est de savoir si notre requête fonctionne vraiment contre Postgres, une base mockée ne répond rien, donc je lance la vraie dans un conteneur. C'est désormais mon choix par défaut pour la couche d'intégration, puisque les conteneurs l'ont rendu bon marché. Je mocke les services tiers que je ne contrôle pas, puis j'adosse cela à des tests de contrat planifiés contre leur bac à sable.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Quel est le signe qu'une suite de tests contient trop de mocks ?
- Comment testeriez-vous la gestion d'erreur d'un tiers que vous ne pouvez pas forcer à échouer ?
- Quand un espion est-il le bon outil plutôt qu'un mock complet ?
Autres questions pour Ingénieur QA
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions