Introduction aux tests unitaires automatisés (1h30)
- Pourquoi tester?
- Dette technique, régressions, maintenance
- Position des tests unitaires dans la pyramide des tests
- Différence entre tests unitaires, tests d’intégration, tests fonctionnels
- Tests en Python : unittest, pytest (choix privilégié)
Meilleures pratiques en matière de tests unitaires (2h)
- Caractéristiques d’un bon test : rapide, indépendant, déterministe, lisible
- Convention de nommage
- Structure Arrange / Act / Assert
- Tests paramétrés
- Cas nominaux vs cas limites
- Tests et exceptions
- Ce qu’il ne faut pas tester
Écrire des tests pour le TDD (2h30)
- Philosophie du TDD
- Différence entre tester après coup et concevoir par le test
- Écriture d’un test expressif
- Gérer les faux départs et les tests rouges
Le cycle Rouge – Vert – Réfacteur (1h)
- Rouge : écrire un test qui échoue
- Vert : coder le minimum fonctionnel
- Réfacteur : améliorer sans casser
Approfondissement du cycle Rouge-Vert-Réfacteur (2h)
- Identifier les signaux de refactoring
- Tests comme filet de sécurité
- Duplication vs abstraction
- Refactoring orienté design
La puissance des mocks (3h)
- Pourquoi utiliser des mocks?
- Différence entre Mock, Stub, Fake
- Outils Python : unittest.mock, pytest-mock
- Bonnes pratiques : ce qu’il est pertinent de mocker, les dangers du sur-mocking
TDD dans un projet réel (1h30)
- Intégration des tests dans un projet existant
- TDD et dette technique
- TDD en équipe
- Limites et écueils du TDD
- Quand ne pas faire du TDD