Retour au portfolio Culture technique
Qualité logicielle

Pyramide de tests

Un modèle pour équilibrer sa stratégie de tests : beaucoup de tests unitaires rapides, moins de tests d'intégration, et peu de tests end-to-end coûteux.

Tests unitairesTests d'intégrationE2ETDDQualité

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.

La pyramide de tests
E2E
Lents · Coûteux · Peu nombreux
Intégration
Moyens · Coût moyen
Tests Unitaires
Rapides · Peu coûteux · Très nombreux
Règle générale : ~70% de tests unitaires · ~20% de tests d'intégration · ~10% de tests E2E. Plus on monte dans la pyramide, plus les tests sont lents, fragiles et coûteux à maintenir.

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

Tests unitaires

JUnit 5 Mockito AssertJ Spock

Intégration

Spring Boot Test MockMvc Testcontainers MockServer

E2E

Cypress Playwright Cucumber RestAssured

Antipatterns à éviter

TDD (Test-Driven Development) : écrire le test avant le code. Red → Green → Refactor. Permet de concevoir une API claire et un code naturellement testable.