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
Assertion | Description |
---|---|
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.