Tests Unitaires, Intégration & TestContainers

JUnit 5, MockMvc, @DataJpaTest, stratégie de tests, bases Docker isolées, pipelines CI/CD fiables : maîtrisez le testing Spring Boot au niveau pro.

Introduction

Une application professionnelle doit être testée en profondeur. Spring Boot fournit un écosystème complet pour tester les couches web, services, persistence, sécurité et intégration.

Avec TestContainers, vos tests s’exécutent contre de vraies bases Docker : PostgreSQL, Kafka, Redis, MongoDB… C’est la norme moderne dans les équipes matures et les pipelines CI/CD fiables.

Lexique essentiel

JUnit 5
Moteur de test moderne utilisé avec Spring Boot.
MockMvc
Test d’API REST sans serveur externe.
@SpringBootTest
Démarre tout le contexte Spring pour les tests d’intégration.
@DataJpaTest
Test spécialisé pour la couche JPA/Hibernate.
TestContainers
Isolation complète via des bases Docker démarrées automatiquement.
Embedded Databases
H2 pour les tests rapides (mais limité pour les projets entreprise).

1. Tests Unitaires : Services & logique métier

Les tests unitaires doivent être purs, rapides, et ne pas dépendre de Spring.

Exemple


class PriceCalculatorTest {

    @Test
    void shouldCalculateTotalPrice() {
        var calc = new PriceCalculator();
        assertEquals(200, calc.total(100, 2));
    }
}
    

👉 Aucun Spring, aucune base → tests ultra rapides.

2. Tests API REST avec MockMvc


@WebMvcTest(OrderController.class)
class OrderControllerTest {

    @Autowired
    private MockMvc mvc;

    @MockBean
    private OrderService service;

    @Test
    void shouldCreateOrder() throws Exception {
        mvc.perform(post("/orders")
                .content("""
                    {"productId":"P1","quantity":2,"customerId":"C1"}
                """)
                .contentType("application/json"))
            .andExpect(status().isOk());
    }
}
    

👉 Parfait pour tester les DTO, validations, endpoints, statuts HTTP.

3. Tests JPA & Hibernate avec @DataJpaTest

Ce test charge uniquement la couche JPA → rapide et précis.


@DataJpaTest
class OrderRepositoryTest {

    @Autowired
    private OrderRepository repo;

    @Test
    void shouldStoreOrder() {
        var order = new Order("C1", BigDecimal.valueOf(120));
        var saved = repo.save(order);
        assertNotNull(saved.getId());
    }
}
    
Bonnes pratiques :
  • Tester les repositories avec @DataJpaTest.
  • Tester les controllers avec @WebMvcTest.
  • Tester les services avec JUnit pur + mocks.
  • Tester les intégrations via TestContainers.
  • Ne jamais mélanger toutes les couches dans un seul test.

4. Tests d’intégration entreprises avec TestContainers

TestContainers démarre de vrais services Docker pendant les tests : PostgreSQL, Kafka, Redis, RabbitMQ…

Exemple PostgreSQL


@Testcontainers
@SpringBootTest
class OrderIntegrationTest {

    @Container
    static PostgreSQLContainer db =
        new PostgreSQLContainer<>("postgres:16")
            .withDatabaseName("testdb")
            .withUsername("user")
            .withPassword("pwd");

    @Autowired
    private OrderRepository repo;

    @Test
    void shouldPersistOrder() {
        var order = new Order("C1", BigDecimal.TEN);
        var saved = repo.save(order);
        assertNotNull(saved.getId());
    }
}
    

👉 Résultat : environnement identique à la production.

Exemple : TestContainers Kafka


@Container
static KafkaContainer kafka = new KafkaContainer("confluentinc/cp-kafka:7.5.0");
    

Permet de tester un producteur/consommateur Kafka avec un cluster réel.

5. Intégration CI/CD

  • GitHub Actions supporte TestContainers nativement.
  • GitLab CI : activer le service Docker In Docker.
  • TestContainers = robustesse + zéro mock inutile.

Quiz : Tests & TestContainers

  • Q1. Quel test charge tout le contexte Spring ?
    • A. @WebMvcTest
    • B. @SpringBootTest ✔
    • C. @DataJpaTest
  • Q2. Quel outil permet de tester avec de vraies bases ?
    • A. H2
    • B. Mockito
    • C. TestContainers ✔

Exercice d’application

Implémentez un pipeline de tests complet :
— Tests unitaires sur les services
— Tests API MockMvc
— Tests JPA avec @DataJpaTest
— Intégration PostgreSQL via TestContainers
— Script CI pour exécution automatisée

Résumé

Une architecture de tests professionnelle combine rapidité, isolation, réalisme et stabilité. Grâce à JUnit 5, MockMvc, @DataJpaTest et TestContainers, vous construisez des pipelines fiables, propres et adaptés aux environnements d’entreprise.

Navigation de la Formation

Tests unitaires et intégration. Contenu à remplacer.

Review My Order

0

Subtotal