C'est une distinction importante, mais malheureusement, vous ne trouverez jamais d'accord. Le problème est que la plupart des développeurs les définissent de leur propre point de vue. C'est très similaire au débat sur Pluton. (S'il était plus proche du Soleil, serait-ce une planète?)
Les tests unitaires sont faciles à définir. Il teste le CUT ( Code Under Test ) et rien d'autre. (Enfin, aussi peu que possible.) Cela signifie des moqueries, des contrefaçons et des appareils.
À l'autre extrémité du spectre, il y a ce que beaucoup de gens appellent les tests d'intégration de système . C'est tester autant que possible, mais toujours à la recherche de bogues dans votre propre CUT.
Mais qu'en est-il de la vaste étendue entre les deux?
- Par exemple, que faire si vous testez juste un peu plus que le CUT? Et si vous incluez une fonction Fibonacci au lieu d'utiliser un appareil que vous avez injecté? J'appellerais cela des tests fonctionnels , mais le monde n'est pas d'accord avec moi.
- Et si vous incluez
time()
ou rand()
? Ou si vous appelez http://google.com
? J'appellerais ça le test du système , mais encore une fois, je suis seul.
Pourquoi est-ce important? Parce que les tests système ne sont pas fiables. Ils sont nécessaires, mais ils échoueront parfois pour des raisons indépendantes de votre volonté. D'un autre côté, les tests fonctionnels doivent toujours réussir, et non échouer au hasard; s'ils sont rapides, ils pourraient tout aussi bien être utilisés dès le départ afin d'utiliser le développement piloté par les tests sans écrire trop de tests pour votre implémentation interne. En d'autres termes, je pense que les tests unitaires peuvent être plus problématiques qu'ils n'en valent, et j'ai une bonne compagnie .
J'ai mis des tests sur 3 axes, avec tous leurs zéros aux tests unitaires :
- Test fonctionnel: utiliser du code réel de plus en plus profondément dans votre pile d'appels.
- Test d'intégration: de plus en plus haut votre pile d'appels; en d'autres termes, tester votre CUT en exécutant le code qui l'utiliserait.
- Test système: de plus en plus d'opérations irremplaçables (ordonnanceur O / S, horloge, réseau, etc. )
Un test peut facilement être tous les 3, à des degrés divers.