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.

ExempleTester 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.

Plan de test fonction somme_nb_entiers(n)

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 :

1
def somme_nb_entiers(n):
2
    """
3
    n - int, entier strictement positif
4
    Sortie: int - somme des n premiers entiers
5
    >>> somme_nb_entiers(0)
6
    0
7
    >>> somme_nb_entiers(1)
8
    0
9
    >>> somme_nb_entiers(4)
10
    6
11
    """
12
    somme = 0
13
    for i in range(n-1):
14
        somme = somme + i
15
    return somme
16
17
##----- Mise en oeuvre des tests -----##
18
if __name__ == "__main__":
19
    import doctest
20
    doctest.testmod()
21

Si on copie-colle ce code, on remarque ce problème :

1
**********************************************************************
2
File "sans titre.py", line 15, in __main__.somme_nb_entiers
3
Failed example:
4
    somme_nb_entiers(4)
5
Expected:
6
    6
7
Got:
8
    3
9
**********************************************************************
10
1 items had failures:
11
   1 of   3 in __main__.somme_nb_entiers
12
***Test Failed*** 1 failures.
13

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())