Vérification des Exceptions en Python en Utilisant doctest

Lorsqu’on écrit du code en Python, il est souvent nécessaire de s’assurer que nos fonctions se comportent comme prévu, en particulier en ce qui concerne la gestion des erreurs. Un scénario courant est de tester si une fonction génère une exception sous certaines conditions. Si vous utilisez le module doctest de Python pour effectuer vos tests, vous vous demandez peut-être : Puis-je vérifier qu’une exception est levée avec doctest ? La réponse est un oui retentissant ! Explorons comment utiliser doctest pour vérifier les exceptions dans vos fonctions Python.

Le Problème : Tester les Exceptions

Considérons une fonction appelée foo(x). Cette fonction est conçue pour lever une exception si son argument est inférieur à zéro. La question centrale ici est comment écrire un doctest qui confirme que la fonction se comporte correctement dans ce scénario. Plus précisément, lorsque nous passons une valeur inférieure à zéro, nous voulons nous assurer qu’une exception est levée pour indiquer qu’il y a eu un problème.

Fonction d’Exemple

Voici une version simple de la fonction foo(x) :

def foo(x):
    if x < 0:
        raise ValueError("x doit être non négatif")
    return x

La Solution : Écrire un doctest

Pour créer un doctest qui vérifie les exceptions, nous allons utiliser l’approche suivante. Dans notre doctest, nous pouvons spécifier que nous nous attendons à ce qu’une exception soit levée lors de l’appel de foo() avec une valeur qui devrait déclencher l’erreur. Voici comment procéder étape par étape :

Étape 1 : Écrire le Doctest

Dans la docstring de votre fonction, vous pouvez ajouter un cas de test démontrant l’exception attendue. Voici ce que cela ressemble :

def foo(x):
    """
    Retourne x s'il est non négatif.
    
    Lève :
        ValueError : Si x < 0.
    
    Exemples :
    >>> foo(-1)
    Traceback (dernier appel le plus récent) :
      ...
    ValueError : x doit être non négatif
    >>> foo(3)
    3
    """
    if x < 0:
        raise ValueError("x doit être non négatif")
    return x

Étape 2 : Exécuter le Doctest

Pour exécuter le doctest, incluez le snippet suivant en bas de votre script Python :

if __name__ == "__main__":
    import doctest
    doctest.testmod()

Étape 3 : Résultat Attendu

Lorsque vous exécutez le script, doctest traitera les exemples dans la docstring. Si tout fonctionne correctement, vous ne verrez aucune sortie (indiquant que tous les tests ont réussi). Si l’exception n’est pas levée comme prévu, doctest signalera une erreur.

Ressources Supplémentaires

Pour plus d’informations sur la façon d’utiliser efficacement doctest dans vos modules, consultez la documentation officielle du module doctest.

Conclusion

Utiliser doctest pour vérifier que les exceptions sont levées correctement n’est pas seulement possible ; c’est simple ! En ajoutant quelques lignes dans la docstring de votre fonction, vous pouvez efficacement documenter et tester le comportement de votre code, garantissant qu’il respecte des modèles attendus. Que vous écriviez de nouvelles fonctions ou testiez des fonctions existantes, doctest offre un moyen puissant d’inclure des tests basés sur des exemples directement à côté de votre code. Profitez de rendre votre code robuste et bon codage !