MODULE 9 - Tests avec Spring Boot
Bienvenue au Module 9! 🧪
Votre application fonctionne... mais comment être sûr qu'elle fonctionnera toujours? Après chaque modification, après chaque déploiement? Les tests automatisés sont votre filet de sécurité.
Ce module vous apprend à écrire des tests professionnels qui garantissent la qualité de votre code.
🎓 Objectifs d'Apprentissage
À la fin de ce module, vous serez capable de:
- ✅ Comprendre la pyramide des tests
- ✅ Écrire des tests unitaires avec JUnit 5
- ✅ Utiliser Mockito pour mocker les dépendances
- ✅ Créer des tests d'intégration avec @SpringBootTest
- ✅ Tester les API REST avec MockMvc
- ✅ Mesurer la couverture de code
📚 Prérequis
Avant de commencer ce module, vous devez avoir:
- ✅ Complété les Modules 1 à 8
- ✅ Maîtrisé l'architecture 3 couches
- ✅ Créé des services et repositories Spring
- ✅ Être à l'aise avec les API REST
🗺️ Plan du Module
Partie Théorique (5 chapitres)
Chapitre 1: Introduction aux Tests
Durée: 30 minutes
Contenu:
- Pourquoi tester?
- La pyramide des tests
- Tests unitaires vs intégration vs E2E
- TDD et BDD
- Configuration Maven/Gradle
Pourquoi important? Comprendre la stratégie de test
Chapitre 2: Tests Unitaires avec JUnit 5
Durée: 1 heure
Contenu:
- Annotations JUnit 5 (@Test, @BeforeEach, etc.)
- Assertions (assertEquals, assertTrue, assertThrows)
- Tests paramétrés
- Cycle de vie des tests
- Bonnes pratiques
Pourquoi important? La base de tous les tests
Chapitre 3: Mocking avec Mockito
Durée: 1 heure
Contenu:
- Pourquoi mocker?
- @Mock, @InjectMocks, @Spy
- when().thenReturn()
- verify() et argument matchers
- Stubbing et exceptions
Pourquoi important? Isoler les unités à tester
Chapitre 4: Tests d'Intégration
Durée: 45 minutes
Contenu:
- @SpringBootTest
- @DataJpaTest pour les repositories
- @WebMvcTest pour les controllers
- TestContainers
- Profils de test
Pourquoi important? Tester les composants ensemble
Chapitre 5: Tests REST API
Durée: 45 minutes
Contenu:
- MockMvc en détail
- WebTestClient
- Test des réponses JSON
- Test des erreurs et exceptions
- RestAssured (bonus)
Pourquoi important? Valider vos endpoints
Partie Pratique (3 TPs)
TP9.1: Tests Unitaires - Service Layer
Durée: 1h30
Objectif: Tester une couche service complète
Vous allez:
- Écrire des tests pour un ProductService
- Mocker le repository
- Tester les cas nominaux et d'erreur
- Atteindre 80%+ de couverture
TP9.2: Tests d'Intégration - Repository
Durée: 1h30
Objectif: Tester la persistance avec une vraie BDD
Vous allez:
- Utiliser @DataJpaTest
- Tester les requêtes personnalisées
- Vérifier les contraintes
- Utiliser H2 pour les tests
TP9.3: Tests REST API - Controller
Durée: 1h30
Objectif: Tester l'API REST complète
Vous allez:
- Utiliser MockMvc
- Tester tous les endpoints CRUD
- Valider les réponses JSON
- Tester la sécurité
📊 Durée Totale
| Type | Durée |
|---|---|
| Théorie | 4h (5 chapitres) |
| Pratique | 4h30 (3 TPs) |
| Total | 8h30 (~2-3 séances) |
🎯 Ce Que Vous Allez Comprendre
Avant ce Module
// Vous testez manuellement avec Postman... 😰
// Et après chaque modification:
// "Est-ce que ça marche encore?"
// "J'ai peur de casser quelque chose..."
// "Je n'ose pas refactorer..."
Après ce Module
@Test
void shouldCalculateOrderTotal() {
// Given
Order order = new Order();
order.addItem(new Item("Laptop", 1000.0, 2));
order.addItem(new Item("Mouse", 50.0, 1));
// When
double total = orderService.calculateTotal(order);
// Then
assertThat(total).isEqualTo(2050.0);
}
// ✅ 150 tests passed in 3.2s
// Coverage: 87%
// Confiance: 100% 😎
Vous saurez:
- ✅ Écrire des tests lisibles et maintenables
- ✅ Mocker les dépendances correctement
- ✅ Tester chaque couche de l'application
- ✅ Refactorer sans peur
- ✅ Détecter les régressions automatiquement
🚀 Pourquoi Ce Module Est Essentiel
1. Confiance dans le Code
Sans tests:
- "Je pense que ça marche" 🤞
- Peur de modifier le code existant
- Bugs découverts en production
Avec tests:
- "Je sais que ça marche" ✓
- Refactoring en confiance
- Bugs détectés immédiatement
2. Documentation Vivante
@Test
void userShouldNotBeAbleToWithdrawMoreThanBalance() {
// Ce test documente une règle métier!
Account account = new Account(100.0);
assertThrows(InsufficientFundsException.class,
() -> account.withdraw(150.0));
}
3. Compétence Requise
Offres d'emploi Java:
- "TDD/BDD" ✓
- "JUnit, Mockito" ✓
- "Couverture de code > 80%" ✓
- "Tests automatisés obligatoires" ✓
🗺️ Progression dans la Formation
Module 9 = Garantir la qualité avant le déploiement!
📖 Comment Aborder Ce Module
Théorie ET Pratique Ensemble
- Chapitre 1 (Introduction) → Comprendre la stratégie
- Chapitre 2 (JUnit) + TP9.1 → Pratiquer immédiatement
- Chapitre 3 (Mockito) → Compléter le TP9.1 avec mocks
- Chapitre 4 (Intégration) + TP9.2 → Tests repository
- Chapitre 5 (API) + TP9.3 → Tests controller
Temps Recommandé
Option Intensive (1.5 jours):
- Jour 1 Matin: Chapitres 1-2 + début TP9.1
- Jour 1 Après-midi: Chapitre 3 + fin TP9.1
- Jour 2 Matin: Chapitres 4-5 + TP9.2
- Jour 2 Après-midi: TP9.3
Option Progressive (3 séances):
- Séance 1: Chapitres 1-2 + TP9.1
- Séance 2: Chapitres 3-4 + TP9.2
- Séance 3: Chapitre 5 + TP9.3
✅ Auto-Évaluation
Avant de commencer, répondez:
- Savez-vous ce qu'est un test unitaire? ☐ Oui ☐ Non
- Avez-vous déjà utilisé JUnit? ☐ Oui ☐ Non
- Connaissez-vous le mocking? ☐ Oui ☐ Non
- Avez-vous entendu parler de MockMvc? ☐ Oui ☐ Non
- Savez-vous ce qu'est la couverture de code? ☐ Oui ☐ Non
Après le module, vous devrez répondre "Oui" à TOUT!
🎯 Prochaine Étape
Prêt à écrire des tests professionnels?
➡️ Commencer avec le Chapitre 1: Introduction aux Tests