Tout d'abord, quelques définitions:
Une unité teste les unités isolément des autres unités, mais ce que cela signifie n'est défini de manière concrète par aucune source faisant autorité. Définissons-le donc un peu mieux: si les limites d'E / S sont franchies (que cette E / S soit un réseau, un disque, écran, ou interface utilisateur), il y a un endroit semi-objectif sur lequel on peut tracer une ligne. Si le code dépend des E / S, il franchit les limites d'une unité et doit par conséquent se moquer de l'unité responsable de ces E / S.
Selon cette définition, je ne vois pas de raison impérieuse de se moquer de choses telles que des fonctions pures, ce qui signifie que les tests unitaires se prêtent à des fonctions pures ou à des fonctions sans effets secondaires.
Si vous voulez tester les unités avec effets, vous devez vous moquer des unités responsables des effets, mais vous devriez peut-être envisager un test d'intégration. Donc, la réponse courte est: "si vous avez besoin de vous moquer, demandez-vous si vous avez vraiment besoin d'un test d'intégration." Mais il existe une meilleure réponse plus longue ici, et le terrier du lapin va beaucoup plus loin. Mock peut être mon odeur de code préférée car il y a tant à apprendre d'eux.
Code odeurs
Pour cela, nous nous tournons vers Wikipedia:
En programmation informatique, une odeur de code est une caractéristique du code source d’un programme qui indique éventuellement un problème plus grave.
Ça continue plus tard ...
"Les odeurs sont certaines structures du code qui indiquent une violation des principes de conception fondamentaux et ont une incidence négative sur la qualité de la conception". Suryanarayana, Girish (novembre 2014). Refactoring des odeurs de conception logicielle. Morgan Kaufmann. p. 258.
Les odeurs de code ne sont généralement pas des insectes; ils ne sont pas techniquement incorrects et n'empêchent pas le programme de fonctionner. Au lieu de cela, ils indiquent des faiblesses dans la conception susceptibles de ralentir le développement ou d’accroître les risques de bugs ou d’échecs à l’avenir.
En d'autres termes, toutes les odeurs de code ne sont pas mauvaises. Au lieu de cela, ce sont des indications communes que quelque chose pourrait ne pas être exprimé dans sa forme optimale, et l'odeur peut indiquer une opportunité d'améliorer le code en question.
Dans le cas de moqueries, l'odeur indique que les unités qui semblent appeler à se moquer dépendent des unités à simuler. Cela peut indiquer que nous n'avons pas décomposé le problème en éléments pouvant être résolus sur le plan atomique, ce qui pourrait indiquer un défaut de conception dans le logiciel.
L’essence de tout développement logiciel est le processus qui consiste à décomposer un gros problème en morceaux plus petits et indépendants (décomposition) et à composer les solutions ensemble pour former une application qui résout le gros problème (composition).
Le moquage est nécessaire lorsque les unités utilisées pour décomposer le gros problème en parties plus petites dépendent les unes des autres. En d'autres termes, il est nécessaire de se moquer lorsque nos unités de composition atomiques supposées ne sont pas réellement atomiques et que notre stratégie de décomposition n'a pas réussi à décomposer le problème plus vaste en problèmes plus petits et indépendants à résoudre.
Ce qui rend moqueur une odeur de code, ce n’est pas qu’il ya quelque chose de fondamentalement faux à se moquer, il est parfois très utile. Ce qui en fait une odeur de code, c'est qu'il pourrait indiquer une source de couplage problématique dans votre application. Parfois, supprimer cette source de couplage est beaucoup plus productif que d'écrire une maquette.
Il existe de nombreux types de couplage, et certains sont meilleurs que d'autres. Comprendre que les simulacres sont une odeur de code peut vous apprendre à identifier et à éviter les pires types au tout début du cycle de vie d'une application, avant que l'odeur ne devienne pire.