Des tests intégrés à la documentation⚓︎
Le module doctest
permet d'intégrer des tests directement dans la documentation de votre fonction (sa docstring) comme ci-dessous :
import doctest
def puiss(x, n):
"""
Calcule x^n
:param float x: le nombre à élever à la puissance n
:param int n: l'exposant de la puissance
:return: la valeur de x^n
:rtype: int
:CU: il faut que x ne soit pas nul si n est négatif
>>> puiss(2, 3)
8
>>> puiss(-1, 4)
1
>>> puiss(10, 5)
10000
"""
p = 1
for _ in range(n):
p = p * x
return p
doctest.testmod()
nous avons ici inclus dans la docstring des appels à la fonction et ce qu'elle est sensée renvoyer.
Remarque
Le module doctest
ne fonctionne pas encore bien dans un navigateur, il faudra utiliser un vrai éditeur Python (Thonny ou autre).
Exécutez le code ci-dessus dans un éditeur Python et rectifiez une erreur.
Attention
La fonction testmod
va tester les réponses sous forme textuelle. Essayez par exemple d'ajouter une espace après le 8 dans le test pour voir...
Pour éviter cela, vous pouvez utiliser cette syntaxe : doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE)
Que faut-il tester ?⚓︎
Comme nous l'avons vu, nous pouvons tester :
- le type des valeurs en entrée, leur signe ; la même chose pour la valeur en sortie ;
- les cas particuliers génants ;
- les effets de bords (dépassements d'indice ou dernière valeur d'un tableau non atteinte) ;
- etc.
Bien sûr il faut aussi vous assurer que vos tests n'ont pas d'erreur !
Exercice 6
Reprenons la fonction de l'exercice 4 :
def division_euclidienne(a, b):
quotient = a // b
reste = a - b*quotient
return (quotient, reste)
doctest
. Vérifiez que tout fonctionne correctement.
Exercice 7
On prétend que la fonction appartient
définie ci-dessous teste l'appartenance d'une valeur v à un tableau t.
def appartient(v, t):
i = 0
while i<len(t)-1 and t[i]!=v:
i = i + 1
return i < len(t)
>>> appartient(4, [1, 3, 4, 8])
True
doctest
.
Vous devez constater des erreurs car la fonction ne réalise pas en fait ce qu'on attend d'elle.2. Expliquez ce que fait en réalité la fonction
appartient
.Source de cet exercice, d'après un extrait de Numérique et Sciences informatiques (Balabonski, Conchon, Filiâtre, Nguyen).