Il y a quelque temps, j'ai lu, sur une réponse Stack Overflow que je ne trouve pas, une phrase qui expliquait que vous devriez tester les API publiques, et l'auteur a dit que vous devriez tester les interfaces. L'auteur a également expliqué que si une implémentation de méthode changeait, vous ne devriez pas avoir besoin de modifier le scénario de test, car cela romprait le contrat garantissant le fonctionnement du système testé. En d'autres termes, un test doit échouer si la méthode ne fonctionne pas, mais pas parce que l'implémentation a changé.
Cela a attiré mon attention lorsque nous parlons de moqueries. Étant donné que le mocking repose fortement sur les appels d'attente du système sous les dépendances du test, les mocks sont étroitement associés à l'implémentation plutôt qu'à l'interface.
Lors de la recherche de simulateurs contre stub , plusieurs articles conviennent que les stubs doivent être utilisés à la place des simulacres, car ils ne reposent pas sur les attentes des dépendances, ce qui signifie que le test n'a pas besoin de connaître le système sous-jacent sous la mise en œuvre du test.
Mes questions seraient:
- Les moqueries violent-elles le principe ouvert / fermé?
- Y a-t-il quelque chose qui manque dans l'argument en faveur des talons du dernier paragraphe, qui fait que les talons ne sont pas si grands contre les moqueries?
- Si oui, quel serait un bon cas d'utilisation pour se moquer et quand serait un bon cas d'utilisation pour utiliser des talons?
Since mocking relays heavily on expectation calls from system under test's dependencies...
Je pense que c'est là que vous allez de travers. Une maquette est une représentation artificielle d'un système externe. Il ne représente en aucun cas le système externe, sauf dans la mesure où il simule le système externe de manière à permettre l'exécution de tests sur du code ayant des dépendances sur ledit système externe. Vous aurez toujours besoin de tests d'intégration pour prouver que votre code fonctionne avec le vrai système non simulé.