Titre : Tests unitaires en Python avec unittest


Introduction

Les tests unitaires sont essentiels pour s'assurer que votre code fonctionne comme prévu et pour éviter les régressions lors de futures modifications. En Python, la bibliothèque intégrée unittest permet de créer facilement des tests automatisés, de les organiser en classes, et de vérifier les résultats avec des assertions.

Dans cet article, vous allez apprendre à utiliser unittest pour écrire, organiser et exécuter des tests unitaires efficaces, que ce soit pour des fonctions simples ou des classes complexes.


1. Pourquoi faire des tests unitaires ?

  • Vérifier que le code produit le résultat attendu
  • Détecter rapidement les erreurs lors de modifications
  • Documenter le comportement du code
  • Augmenter la confiance lors du refactoring

2. Importer le module unittest

unittest fait partie de la bibliothèque standard :

import unittest


3. Exemple simple de test

fichier : calculs.py

def addition(a, b):
    return a + b

fichier : test_calculs.py

import unittest
from calculs import addition

class TestCalculs(unittest.TestCase):
    def test_addition(self):
        self.assertEqual(addition(2, 3), 5)
        self.assertEqual(addition(-1, 1), 0)

if __name__ == '__main__':
    unittest.main()


4. Les principales assertions disponibles

AssertionDescription
assertEqual(a, b)Vérifie que a == b
assertNotEqual(a, b)Vérifie que a != b
assertTrue(x) / assertFalse(x)Vérifie qu'une condition est vraie ou fausse
assertIs(a, b) / assertIsNot()Vérifie l'identité des objets
assertIn(a, b) / assertNotIn()Vérifie la présence ou non dans une séquence
assertRaises()Vérifie qu’une exception est levée

5. Tester une exception

def diviser(a, b):
    return a / b

class TestDiviser(unittest.TestCase):
    def test_division_zero(self):
        with self.assertRaises(ZeroDivisionError):
            diviser(5, 0)


6. Tester des classes avec setup() et teardown()

Exemple avec une classe à tester

class Panier:
    def __init__(self):
        self.articles = []

    def ajouter(self, article):
        self.articles.append(article)

    def total(self):
        return len(self.articles)

Fichier de test

class TestPanier(unittest.TestCase):
    def setUp(self):
        self.panier = Panier()

    def test_ajouter(self):
        self.panier.ajouter("Pommes")
        self.assertEqual(self.panier.total(), 1)

    def tearDown(self):
        del self.panier


7. Organisation des tests

  • Créez un dossier tests/ dans votre projet
  • Placez vos fichiers de test dedans (test_*.py)
  • Utilisez unittest discover pour lancer tous les tests
python -m unittest discover tests


8. Lancer les tests dans VS Code ou PyCharm

  • VS Code : Cliquez sur l’icône de test (ou F5 si configuré)
  • PyCharm : Clique droit → “Run 'Unittest…'”

9. Exécuter les tests avec pytest (optionnel)

Bien que unittest soit intégré à Python, vous pouvez aussi exécuter vos tests avec pytest sans changer le code :

pip install pytest
pytest


10. Bonnes pratiques pour les tests

  • Testez une seule chose par méthode
  • Nommez clairement vos fonctions : test_quelque_chose
  • Couvrez les cas normaux et les cas limites
  • Automatisez les tests avec CI (GitHub Actions, GitLab CI…)

Conclusion

Le module unittest permet de structurer et d'automatiser vos tests en Python de manière claire et professionnelle. C’est un outil essentiel pour garantir la fiabilité, la maintenabilité et la qualité de votre code. Avec des tests bien conçus, vous pouvez modifier ou étendre votre application en toute confiance.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *