En anglais Unit Test => test de chaque composant séparément.
Never in the field of software development was so much owed by so many to so few lines of code Martin Fowler
Pour assurer la fiabilité d'une application, il est nécessaire que chaque composant soit contrôlé par un ensemble de tests qui en vérifie le bon fonctionnement, indépendamment de l'usage de ce composant dans une application spécifique. L'existence même de ces tests permettra d'être audacieux et de faire évoluer l'application. Cette manière de faire impose d'écrire simultanément le composant et son jeu de test. Compte-tenu des délais toujours trop courts au goût des développeurs et trop longs pour les clients, il est nécessaire de disposer d'une structure (Framework) simple et efficace.
Les Tests Unitaires ne sont pas :
Les Tests Unitaires sont :
J'utilise des Cadre de Test issus du modèle xUnit simple et élégant défini par Kent Beck et Erich Gamma.
Il existe des implémentations pour Smalltalk, Java, .NET et une foultitude d'autres langages que je ne parle pas.
Each is the de facto standard unit testing framework for its respective language.
PyUnit supports test automation, sharing of setup and shutdown code for tests, aggregation of tests into collections, and independence of the tests from the reporting framework.
Chaque module doit disposer d'un jeu de Tests Unitaires. Ce jeu :
Lors de l'intégration d'un nouveau module au Prototype, et avant de livrer l'application, les développeurs lancent l'exécution de tous les Tests Unitaires, pas simplement ceux du module modifié, sur la machine d'intégration. Les tests doivent passer à 100 %. Si un test ne passe pas, le problème vient certainement du code modifié (parfois parce que l'on utilise un service de manière différente), parce que le jeu de Tests passait à 100 % avant les modifications.
Bien évidemment il arrive que les tests laissent passer une anomalie (bug), qui sera découverte par un utilisateur. Dans ce cas, les développeurs doivent commencer par modifier (en général ajouter un Test Unitaire) qui signale l'anomalie. C'est alors et seulement alors qu'ils peuvent corriger l'anomalie. De cette manière ce problème, ou un autre problème similaire ne se produira plus chez le client.
Quelques exemples en Python :
Quelques exemples en C++ :
En cours de rédaction