-
Sujet
-
Bonjour,
comme vous le savez (peut-etre…) quand on fait du code, il est préférable de le documenter pour qu’on puisse le comprendre facilement.
Ainsi, on aura des fonctions du type:
def auCarre(x): """auCarre function return x*x. >>> auCarre(5) 25 >>> auCarre(-1) 1 """ return x*x
On peut afficher cette docstring avec help() :
>>> help(auCarre) Help on function auCarre in module __main__: auCarre(x) auCarre function return x*x. >>> auCarre(5) 25 >>> auCarre(-1) 1
Ce que l’on sait moins, c’est que ces bouts de code dans la docstring qui servent à donner des exemples peuvent être testés.
Ainsi, on pourra faire un code tel que :
import doctest def auCarre(x): """auCarre function return x*x. >>> auCarre(5) 25 >>> auCarre(-1) 1 """ return x*x if __name__ == "__main__" doctest.testmod()
si l’on exécute le code… ca ne fait rien.
En revanche, si l’on change un petit détail… :
import doctest def auCarre(x): """auCarre function return x*x. >>> auCarre(5) 25 >>> auCarre(-1) 1 >>> auCarre(7) 0 """ #il est évident que 7*7=49 et non 0. L'erreur est intentionelle return x*x if __name__ == "__main__": doctest.testmod()
on a alors :
********************************************************************** File "C:/Users/notmyusername/AppData/Local/Programs/Python/Python38-32/test.py", line 2, in __main__ Failed example: auCarre(7) Expected: 0 Got: 49 ********************************************************************** 1 items had failures: 1 of 1 in __main__ ***Test Failed*** 1 failures.
on voit que doctest teste bien les exemples.
doctest va aussi tester les exemples qui sont en dehors de la fonction :
import doctest """ >>> auCarre(7) 0 """ def auCarre(x): """auCarre function return x*x. >>> auCarre(5) 25 >>> auCarre(-1) 1 """ return x*x if __name__ == "__main__": doctest.testmod()
donnera
********************************************************************** File "C:/Users/stillnotMyUsernameEHEH/AppData/Local/Programs/Python/Python38-32/test.py", line 4, in __main__ Failed example: auCarre(7) Expected: 0 Got: 49 ********************************************************************** 1 items had failures: 1 of 1 in __main__ ***Test Failed*** 1 failures.
Enfin, on peut donner en paramètre à doctest.testmod() le chemin vers un fichier contenant des exemples (tout comme les docstrings) et il les testera aussi sur la fonction
doctest.testmode("examples.txt") #comme ca par exemple
Voilà voilà, je vous laisse chercher tout seul pour la suite : https://docs.python.org/3/library/doctest.html
- Vous devez être connecté pour répondre à ce sujet.