« LeSS - Tests unitaires » : différence entre les versions
De Wiki Agile
m Ajout encadré |
|||
| (11 versions intermédiaires par 2 utilisateurs non affichées) | |||
| Ligne 6 : | Ligne 6 : | ||
---- | ---- | ||
Traducteur : Nicolas Mereaux<br /> | Traducteur : Nicolas Mereaux<br /> | ||
Relecteur : Fabrice Aimetti<br /> | |||
Date : 29/06/2022<br /> | Date : 29/06/2022<br /> | ||
---- | ---- | ||
| Ligne 96 : | Ligne 97 : | ||
== Schéma pour de bons tests unitaires == | == Schéma pour de bons tests unitaires == | ||
=== Pas de nouvelles, bonnes nouvelles === | === Pas de nouvelles, bonnes nouvelles === | ||
Si le test passe, il devrait afficher seulement OK (voire quelques points pour afficher son avancement). Aucune autre information n'est nécessaire. | |||
Si le test passe, il devrait afficher seulement OK (voire quelques points pour afficher son avancement). Aucune autre information nécessaire. | |||
[[Image:unit_test_success.png|unit_test_success.png|border|link=|800px]] | [[Image:unit_test_success.png|unit_test_success.png|border|link=|800px]] | ||
Règle empirique : | |||
Aucune intervention humaine ne devrait être nécessaire pour préparer l’exécution du test, exécuter les cas de tests ou en vérifier les résultats. | |||
Et lorsqu’un test unitaire échoue, il devrait nous fournir toutes les informations nécessaires. L’objectif est de limiter la durée pendant laquelle vous êtes occupé à débogguer le code concerné. | |||
[[Image:342xNxunit_test_fail.png|342xNxunit_test_fail.png|border|link=]] | [[Image:342xNxunit_test_fail.png|342xNxunit_test_fail.png|border|link=]] | ||
=== Arranger, Agir, Auditer (''Arrange'', ''Act'', ''Assert'') === | === Arranger, Agir, Auditer (''Arrange'', ''Act'', ''Assert'') === | ||
Un bon schéma à suivre en ce qui concerne les tests unitaires est "'''AAA'''" : '''Arrange (dans le sens de mettre en place)''', '''Act (dans le sens d’une action faite sur quelque chose)''' et '''Assert (dans le sens de contrôler)'''. | |||
Un bon schéma à suivre en ce qui concerne les tests unitaires est | |||
Si vous pouvez repérer ce schéma dans chacun de vos cas de tests, vos tests devraient facile à comprendre, et ils devraient s’avérer suffisamment spécifiques et aller droit au but. Un cas de test unitaire devrait tester une seule et unique chose. Par conséquent, il devrait y avoir un seul AAA dans un cas de test. Un cas de test ne devrait pas être très prolixe (c’est-à-dire plus de 10 lignes de code) s’il suit le schéma AAA. | Si vous pouvez repérer ce schéma dans chacun de vos cas de tests, vos tests devraient être facile à comprendre, et ils devraient s’avérer suffisamment spécifiques et aller droit au but. Un cas de test unitaire devrait tester une seule et unique chose. Par conséquent, il devrait y avoir un seul AAA dans un cas de test. Un cas de test ne devrait pas être très prolixe (c’est-à-dire plus de 10 lignes de code) s’il suit le schéma AAA. | ||
<pre>import unittest class TestGroupForTextWrapping(unittest.TestCase): | <pre>import unittest class TestGroupForTextWrapping(unittest.TestCase): | ||
| Ligne 145 : | Ligne 132 : | ||
=== Développement piloté par le comportement (BDD) === | === Développement piloté par le comportement (BDD) === | ||
Identique au schéma '''AAA''', le '''BDD''' utilise trois mots-clés différents pour spécifier chaque cas de test : '''Étant donné''', '''Lorsque''' et '''Alors'''. (Vous pouvez aussi utiliser '''Et''' comme mot-clé supplémentaire) | |||
<pre> | |||
Given / Étant donné que la longueur du texte pour le retour à la ligne est défini à 10 | Given / Étant donné que la longueur du texte pour le retour à la ligne est défini à 10 | ||
And / Et que le caractère '-' est utilisé comme connecteur entre deux mots | And / Et que le caractère '-' est utilisé comme connecteur entre deux mots | ||
When / Lorsque la longueur du texte est inférieure à 10 | When / Lorsque la longueur du texte est inférieure à 10 | ||
Then / Alors le texte ne devrait pas être retourné à la ligne</pre> | Then / Alors le texte ne devrait pas être retourné à la ligne</pre> | ||
Comme vous pouvez le constater, le triptyque | Comme vous pouvez le constater, le triptyque "étant donné - lorsque - alors" s'allie plutôt bien avec le triptyque "Arrange - Act - Assert". Ils définissent tous les deux un état transition d’une machine à état finie. Vous pouvez en savoir plus en consultant cet article d’[https://sites.google.com/site/unclebobconsultingllc/the-truth-about-bdd Oncle Bob]. Voici quelques différences entre les deux : | ||
* Le BDD est davantage orienté "dehors vers dedans", cela veut dire qu’il met davantage l’accent sur le comportement externe | |||
* Avec le BDD, vous devez définir un '''langage spécifique au domaine''' pour écrire vos spécifications de tests. À cause de cela, vous aurez besoin généralement d’un ''framework'' supplémentaire. Par exemple, pour Python vous pourrez utilisez [https://pypi.org/project/behave/ behave]. | |||
* Le BDD est davantage | |||
* Avec le BDD, vous devez définir un '''langage spécifique au domaine''' pour écrire vos spécifications de tests. À cause de cela, vous aurez besoin généralement d’un ''framework'' supplémentaire. Par exemple, pour Python vous pourrez utilisez [ | |||
=== La règle d’or du test unitaire === | === La règle d’or du test unitaire === | ||
De manière générale, une bonne règle d’or pour des tests unitaires serait : | De manière générale, une bonne règle d’or pour des tests unitaires serait : | ||
'''Chaque cas de test unitaire devrait comporter un périmètre très restreint.''' | |||
De telle manière que : | De telle manière que... : | ||
* Lorsque le test échoue, qu’il ne soit pas nécessaire de faire du déboggage pour localiser le problème. | * Lorsque le test échoue, qu’il ne soit pas nécessaire de faire du déboggage pour localiser le problème. | ||
* Les tests soient stables car les dépendances sont limitées. | * Les tests soient stables car les dépendances sont limitées. | ||
* Il y ait moins de duplications, que ce soit plus facile à maintenir | * Il y ait moins de duplications, que ce soit plus facile à maintenir. | ||
Il n’existe pas de secrets pour écrire un bon test unitaire. Afin d’écrire un bon test unitaire, vous devez créer une conception qui soit facile à tester. | Il n’existe pas de secrets pour écrire un bon test unitaire. Afin d’écrire un bon test unitaire, vous devez créer une conception qui soit facile à tester. | ||