Aller au contenu

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 :

🐍 Script Python
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 :

🐍 Script Python
def division_euclidienne(a, b):
    quotient = a // b
    reste = a - b*quotient
    return (quotient, reste)
Écrivez une courte docstring puis intégrez des tests dans la docstring avec le mécanisme de 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.

🐍 Script Python
def appartient(v, t):
    i = 0
    while i<len(t)-1 and t[i]!=v:
        i = i + 1
    return i < len(t)
Par exemple :
🐍 Script Python
>>> appartient(4, [1, 3, 4, 8])
True
1. Établissez un jeu de quelques tests (où dans certains cas v est présent dans le tableau, dans d'autres non). Puis utilisez-les avec le module 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).