Moi et mes collègues avons eu un peu de désaccord hier soir au sujet des tests unitaires dans notre application PHP/MySQL. La moitié d'entre nous ont soutenu que lorsque vous testez une fonction dans une classe, vous devez vous moquer de tout ce qui se trouve en dehors de cette classe et de ses parents. L'autre moitié a fait valoir que vous NE DEVRIEZ PAS vous moquer de tout ce qui est une dépendance directe de la classe non plus.Tests unitaires - objectif fondamental?
L'exemple spécifique était notre mécanisme de journalisation, qui est passé à travers une classe Logging statique, et nous avons eu un certain nombre d'appels Logging :: log() à divers endroits dans notre application. La première moitié d'entre nous a dit que le mécanisme de journalisation devrait être truqué (faux) parce qu'il serait testé dans les tests de l'unité de journalisation. La deuxième moitié d'entre nous a soutenu que nous devrions inclure la classe Logging originale dans notre test unitaire de sorte que si nous modifions notre interface de journalisation, nous serons en mesure de voir si cela crée des problèmes dans d'autres parties de l'application mettre à jour l'interface d'appel. Donc, je suppose que la question fondamentale est: est-ce que les tests unitaires servent à tester la fonctionnalité d'une seule unité dans un environnement fermé, ou à montrer les conséquences de changements à une seule unité dans un environnement plus large? Si c'est l'un d'entre eux, comment accomplissez-vous l'autre?
+1 C'est une bonne question, car elle expose quelque chose que beaucoup de gens confondent avec les tests unitaires. – Fenton