Tests en Python
Pourquoi faire des tests ?
Un test permet de dire à Python le résultat attendu d'une fonction (ou autre) pour des paramètres donnés. Cela permet de vérifier qu'une fonction fait bien ce qui lui est demandé. C'est particulièrement utile, lorsqu'on modifie légèrement un programme complexe, pour s'assurer que le reste du code n'est « cassé » suite à ce changement. Ainsi, on lance les tests et si tout fonctionne, on peut raisonnablement penser que nous n'avons pas ajouté d'erreurs.
Comment faire des tests ?
Il existe plusieurs façons de faire des tests en PYthon. On peut utiliser des bibliothèques telles de pytest ou unitest. Ces deux bibliothèques sont assez puissantes mais demandent des connaissances un peu plus avancées que les doctests que nous allons utiliser.
Les doctests s'intègrent dans les docstrings de Python. Même si cela peut paraître déroutant au début, cela reste la méthode la plus simple pour effectuer des test en Python. Pour comprendre commençons par un exemple :
def somme(a, b):
"""
# Ici c’est la documentation de la fonction
Ajoute deux nombres.
# Le test avec son résultat
>>> somme(2,2)
4
"""
return a + b
# On demande à Python de parser les tests
if __name__ == "__main__":
import doctest
doctest.testmod()
1) Testez ce programme. Il ne doit rien se passer.
2) Remplacez maintenant le contenu de la fonction par return a + b + 1
et relancez le test.
Un message doit alors annoncer que le test a échoué.
Les doctests se composent ainsi :
"""
>>> une_instruction
>>> eventuellement un autre instruction
>>> puis une autre
le_résultat_attendu
"""
On peut en mettre plusieurs et les séparer par d'autres textes. Il faut juste sauter une ligne après un test si on veut mettre du texte :
def somme(a, b):
"""
Ajoute deux nombres.
>>> somme(2,2)
4
>>> somme(0,5)
5
Je peux ajouter un texte et ensuite faire un nouveau test
>>> somme(-1,1)
0
Et encore un texte
"""
return a + b
Les doctests participent ainsi à la documentation en donnant des exemples concrets d'utilisation de la fonction.
Sources et compléments
- Documentation officielle de doctest
- la page officelle de Python sur les docstrings