Tests unitaires
"Un test unitaire protège le code comme une ceinture de sécurité protège un conducteur."
Objectifs pédagogiques
À la fin de cette page, vous serez capable de :
- définir un test unitaire
- comprendre son rôle dans la pyramide de test
- identifier ce qui doit être testé en unitaire
- expliquer pourquoi on isole les dépendances
- donner des exemples concrets avec MyEvents
Définition
Un test unitaire vérifie le comportement d’une unité de code :
- fonction
- méthode
- classe
👉 Il teste une unité isolément, sans dépendances réelles (pas de DB, pas d’API, pas de réseau).
Pourquoi c’est important ?
Les tests unitaires offrent :
- un feedback rapide
- une détection précoce des bugs
- une meilleure maintenabilité
- une base solide pour la régression
👉 Dans la pyramide de test :
les tests unitaires sont nombreux et peu coûteux.
Quand les utiliser ?
- dès qu’on écrit une nouvelle fonctionnalité
- à chaque correction de bug
- lors de refactorings (sécuriser les changements)
- dans une approche TDD (optionnel)
Exemple fil rouge – MyEvents
Dans MyEvents, on peut tester unitairement :
- la validation d’un formulaire de création d’événement
- le calcul du prix total d’un panier de billets
- les règles métier : quotas, statuts, contraintes
Exemple 1 — Calcul de prix total (simple et testable)
Règle métier (exemple)
- prix billet = 25 CHF
- quantité = 3
- total attendu = 75 CHF
✅ Test unitaire :
- on appelle une méthode CalculateTotalPrice(25, 3)
- on vérifie que le résultat vaut 75
Exemple 2 — Validation de données (cas limites)
Règle métier (exemple)
- titre événement obligatoire
- date de fin > date de début
- capacité >= 1
✅ Tests unitaires possibles : - titre vide → erreur - fin avant début → erreur - capacité = 0 → erreur
Isolation des dépendances (rappel)
Si une méthode appelle une API externe (paiement Stripe, email SendGrid…) :
- ❌ pas unitaire si on appelle le vrai service
- ✅ unitaire si on remplace par un double (mock/stub)
👉 Voir : Moyens et dépendances de test
Ce qu’un test unitaire ne doit pas faire
❌ Ne doit pas :
- appeler une vraie base de données
- appeler une API externe réelle
- dépendre du réseau ou de fichiers système
✅ Doit :
- rester rapide
- être stable
- être reproductible
“Les tests unitaires sont la fondation de la pyramide. Ils sont automatisés et rapides à exécuter.”