DEV Community

Raphaël Anic-Antic
Raphaël Anic-Antic

Posted on

GWT : une astuce simple pour des tests simples

Dans cette série de posts sur l'assurance qualité, je voulais vous partager un format simple à mettre en place pour rendre vos tests plus lisibles et potentiellement détecter des erreurs de conception.

Given When Then

Given When Then (ou GWT) est un format simple qui définit les trois étapes obligatoires d'un test.

En effet, lorsque nous rédigeons un test, nous implémentons toujours les trois mêmes étapes :

  • Mise en place de l'état du système (initialisation)
  • Action sur le système (exécution)
  • Observation du nouvel état du système (assertion)

Les sources de notre test peuvent représenter ces trois étapes en les divisant par de simples commentaires :

// Given
Person p = new Person("john", "Doe", 22);
PersonService service = new PersonService();

// When
boolean isAdult = service.isAdult(p);

// Then
assertThat(isAdult).isTrue();
Enter fullscreen mode Exit fullscreen mode

Given

Cette partie regroupe toutes les étapes nécessaires à l'initialisation du test. Elle décrit l'état du système précédant l'exécution.

  • Cette partie peut être vide (ex : si notre système n'a pas d'état)

  • Si cette partie est grande et/ou complexe, alors cela peut :

    • mettre en évidence un système trop complexe
    • indiquer un périmètre de test trop grand.
    • se traduire en un test instable (flaky)

When

Il s'agit de l'action sur le système. Généralement peut être résumée en un seul appel de méthode.

  • Si plusieurs appels de méthodes sont nécessaires pour rendre le test intéressant, alors cela peut signifier que
    • le code à tester est trop complexe / factorisé
    • le périmètre de test peut encore être réduit.

Then

Cette dernière rubrique contient toutes les assertions (vérifications) faites sur le système.

Un test avec une partie "Then" vide est un test inutile !

Conclusion

GWT est un format trivial à mettre en place qui peut grandement aider la rédaction de test et mettre en valeur les défauts de conception d'un système.
Toutefois, l'implémentation présentée ici n'est que la simplification du langage "Gerkhin" utilisé par l'outil "Cucumber".

Si vous souhaitez en savoir plus sur GWT, je vous invite à lire cet article de Martin Fowler.

Top comments (0)