Aller au contenu principal

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:

  1. ✅ Comprendre la pyramide des tests
  2. ✅ Écrire des tests unitaires avec JUnit 5
  3. ✅ Utiliser Mockito pour mocker les dépendances
  4. ✅ Créer des tests d'intégration avec @SpringBootTest
  5. ✅ Tester les API REST avec MockMvc
  6. ✅ 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​

TypeDurée
Théorie4h (5 chapitres)
Pratique4h30 (3 TPs)
Total8h30 (~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​

  1. Chapitre 1 (Introduction) → Comprendre la stratégie
  2. Chapitre 2 (JUnit) + TP9.1 → Pratiquer immédiatement
  3. Chapitre 3 (Mockito) → Compléter le TP9.1 avec mocks
  4. Chapitre 4 (Intégration) + TP9.2 → Tests repository
  5. 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:

  1. Savez-vous ce qu'est un test unitaire? ☐ Oui ☐ Non
  2. Avez-vous déjà utilisé JUnit? ☐ Oui ☐ Non
  3. Connaissez-vous le mocking? ☐ Oui ☐ Non
  4. Avez-vous entendu parler de MockMvc? ☐ Oui ☐ Non
  5. 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


⬅️ Retour au Plan de Cours