Module doctest
Précédemment, nous avons vu qu'un docstring devait au moins présenter les spécifications de la fonction (entrées, sorties...).
On peut ensuite ajouter un jeu de tests au docstring. Si ces tests sont présentés correctement, Python peut les exploiter directement grâce au module doctest.
Exemple : Tester et corriger un code
Nous avons établi un plan de test pour la fonction somme_nb_entiers(n). Cette fonction doit renvoyer la somme des n premiers entiers consécutifs.
cas | n | valeur renvoyée attendue |
---|---|---|
aucun | 0 | 0 |
un | 1 | 0 |
plusieurs | 4 | 0 + 1 + 2 + 3 = 6 |
Pour mettre en œuvre ce plan de test, on rédige le code de la fonction, suivi du programme principal qui contient l'appel au module doctest :
def somme_nb_entiers(n):
"""
n - int, entier strictement positif
Sortie: int - somme des n premiers entiers
>>> somme_nb_entiers(0)
0
>>> somme_nb_entiers(1)
0
>>> somme_nb_entiers(4)
6
"""
somme = 0
for i in range(n-1):
somme = somme + i
return somme
##----- Mise en oeuvre des tests -----##
if __name__ == "__main__":
import doctest
doctest.testmod()
Si on copie-colle ce code, on remarque ce problème :
**********************************************************************
File "sans titre.py", line 15, in __main__.somme_nb_entiers
Failed example:
somme_nb_entiers(4)
Expected:
6
Got:
3
**********************************************************************
1 items had failures:
1 of 3 in __main__.somme_nb_entiers
***Test Failed*** 1 failures.
Il y a donc une erreur de logique dans notre code...
En corrigeant notre code, nous n'obtenons aucune erreur dans notre code (correction à apporter sur la fonction range()
)