Le modèle
La pyramide de tests, popularisée par Mike Cohn, décrit comment répartir ses efforts de test pour obtenir un feedback rapide, une bonne couverture et une suite de tests maintenable.
Les 3 niveaux
🟢 Tests unitaires – La base
Testent une unité isolée (classe, méthode) sans dépendance externe. Les collaborateurs sont remplacés par des mocks. Ils sont rapides (millisecondes), stables et faciles à écrire.
@ExtendWith(MockitoExtension.class) class CommandeServiceTest { @Mock CommandeRepository repository; @InjectMocks CommandeService service; @Test void devraitCalculerLeTotalCorrectement() { // Given var commande = new Commande(List.of( new Ligne(produitA, 2), new Ligne(produitB, 1) )); // When var total = service.calculerTotal(commande); // Then assertThat(total).isEqualTo(Montant.de(150)); } }
🟡 Tests d'intégration – Le milieu
Testent l'interaction entre plusieurs composants : le service avec la base de données, le controller avec le service, etc. Nécessitent souvent un contexte Spring ou une base embarquée.
@SpringBootTest @AutoConfigureMockMvc class CommandeControllerIT { @Autowired MockMvc mockMvc; @Test void devraitRetournerLaCommandeParId() throws Exception { mockMvc.perform(get("/commandes/1")) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value(1)); } }
🔴 Tests End-to-End – Le sommet
Testent l'application de bout en bout, du navigateur à la base de données, comme le ferait un utilisateur réel. Lents, fragiles, mais indispensables pour valider les parcours critiques.
Outils courants : Cypress Playwright Selenium Cucumber
Frameworks Java
JUnit 5 Mockito AssertJ Spock
Spring Boot Test MockMvc Testcontainers MockServer
Cypress Playwright Cucumber RestAssured
Antipatterns à éviter
- Le cône de glace : pyramide inversée avec trop de tests E2E et peu de tests unitaires → suite lente et fragile
- Les tests qui ne testent rien : coverage élevé mais assertions trop faibles
- Les tests couplés à l'implémentation : tester le comment plutôt que le quoi
- Mocker le domaine : les tests unitaires du domaine ne devraient pas nécessiter de mocks