Test Unitaire

Definition

Un test unitaire est un test qui permet de vérifier et valider le comportement d’une unité en isolation.

La définition de l’unité est une source constante de confusion dans la communauté des développeurs, mais aussi dans les entreprises.

Il ya deux écoles:

  • Une école qui considère l’unité comme une classe (notamment dans le contexte de la programmation orientée objet)
  • Une école qui considère l’unité comme une unité fonctionnelle et peut donc correspondre à plusieurs classes. Le test peut traverser plusieurs classes.

Quelle que soit la définition de l’unité, Un bon test unitaire doit respecter soigneusement les critères FIRST:

  • Fast: il doit être rapide, on peut l’exécuter à tout moment
  • Isolated: il doit être isolé, indépendant de tous les autres tests et on peut l’exécuter sans respecter aucun ordre. Généralement une seule cause doit être à l’origine de son échec et non pas plusieurs.
  • Repeatable: il doit être déterministe. Si le test est exécuté plusieurs fois avec les mêmes données d’entrée, le résultat ne devrait jamais changer.
  • Self validating: le test doit faire une auto-validation par lui-même. cela se fait normalement à l’aide d’assertions du framework de tests
  • Timely: il doit être écrit juste avant le code de production (système sous tests) qui fait passer le test. C’est en appliquant la méthode TDD (Test Driven Development).

Un bon test doit respecter le modèle 3A (Arrange/Act/Assert):

  • Arrange: correspond à l’etape de l’initialisation du contexte du test (état initial du test)
  • Act: correspond à l’etape de d’appel de la fonctionnalité à tester
  • Assert: correspond à l’etape de la vérification du résultat du test

Il est également possible d’utiliser le modèle GWT (Given-When-Then):

  • Given: correspond à l’etape de l’initialisation du contexte du test (état initial du test)
  • When: correspond à l’etape de d’appel de la fonctionnalité à tester
  • Then: correspond à l’etape de la vérification du résultat du test
comments powered by Disqus