Je comprends la valeur des tests automatisés et l’utilise chaque fois que le problème est suffisamment spécifié pour que je puisse proposer de bons scénarios de tests. J'ai toutefois remarqué que certaines personnes ici et sur StackOverflow insistent sur le fait de tester uniquement une unité, pas ses dépendances. Ici, je ne vois pas le bénéfice.
Le mocking / stubbing pour éviter de tester les dépendances ajoute de la complexité aux tests. Il ajoute des exigences de flexibilité / découplage artificielles à votre code de production pour prendre en charge les moqueries. (Je suis en désaccord avec quiconque dit que cela favorise une bonne conception. Écrire du code supplémentaire, introduire des choses telles que des frameworks d'injection de dépendance, ou ajouter de la complexité à votre base de code pour rendre les choses plus flexibles / plugables / extensibles / découplés sans réel cas d'utilisation, c'est trop d'ingénierie, bon design.)
Deuxièmement, tester les dépendances signifie que le code de bas niveau critique utilisé partout est testé avec des entrées autres que celles auxquelles l'auteur des tests a explicitement pensé. J'ai trouvé de nombreux bogues dans les fonctionnalités de bas niveau en effectuant des tests unitaires sur les fonctionnalités de haut niveau sans modifier la fonctionnalité de bas niveau dont elle dépendait. Idéalement, ces tests auraient été trouvés par les tests unitaires pour la fonctionnalité de bas niveau, mais les cas manqués se produisent toujours.
Quel est le côté opposé à cela? Est-il vraiment important qu'un test unitaire ne teste pas également ses dépendances? Si oui, pourquoi?
Edit: Je peux comprendre l’intérêt de moquer des dépendances externes telles que des bases de données, des réseaux, des services Web, etc. (Merci à Anna Lear de me motiver à clarifier cela.) Je parlais de dépendances internes , c’est-à-dire d’autres classes, de fonctions statiques, etc. qui n'ont pas de dépendances externes directes.