Il s'agit d'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. (Si elle était plus proche du Soleil, serait-elle une planète ?)
Tests unitaires est facile à définir. Il teste le CUT ( Code en cours d'essai ) et rien d'autre. (Enfin, le moins d'autres choses possible.) Cela signifie des mocks, des fakes et des fixtures.
À l'autre bout du spectre, il y a ce que beaucoup de gens appellent tests d'intégration des systèmes . Il s'agit de tester autant que possible, tout en continuant à chercher des bogues dans votre propre coupe.
Mais qu'en est-il de la vaste étendue qui se trouve entre les deux ?
- Par exemple, que se passe-t-il si vous testez juste un peu plus que le CUT ? Et si vous incluiez une fonction Fibonacci, au lieu d'utiliser une fixation que vous aviez injectée ? J'appellerais cela tests de fonctionnement mais le monde n'est pas d'accord avec moi.
- Et si vous incluiez
time()
o rand()
? Ou si vous appelez http://google.com
? J'appellerais cela test du système mais encore une fois, je suis seul.
Pourquoi cela est-il 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 de manière aléatoire ; s'ils sont rapides, autant les utiliser dès le début 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 causer plus de problèmes qu'ils n'en valent la peine, et j'ai bonne entreprise .
J'ai mis les tests sur 3 axes, avec tous leurs zéros à test unitaire :
- Test fonctionnel : utilisation de code réel de plus en plus profond dans votre pile d'appels.
- Tests d'intégration : de plus en plus élevés en haut votre pile d'appels ; en d'autres termes, vous testez votre CUT en exécutant le code qui l'utiliserait.
- Test du système : de plus en plus d'opérations non répétables (ordonnanceur O/S, horloge, réseau, etc. )
Un test peut facilement être les 3, à des degrés divers.