Tests unitaires Java avec JUnit 6 et Mockito

Tests avec JUnit est un cours de niveau intermédiaire de 5 leçons (environ 2 h 25), avec 15 exercices et 15 questions de quiz. Prérequis : Collections, streams et exceptions. Les exercices sont exécutés et corrigés dans une sandbox côté serveur.

  • Java
  • Intermédiaire
  • 5 leçons
  • 2 h 25
  • 15 exercices
  • Exercices exécutés dans une sandbox serveur

Le cours en bref

Ce cours vous apprend à sécuriser votre code Java avec des tests unitaires automatisés. Vous écrirez des tests JUnit 6 structurés en Arrange / Act / Assert, testerez les cas d'erreur et les cas limites, factoriserez la préparation avec le cycle de vie JUnit et isolerez vos services grâce aux doubles de test et à Mockito. Les exercices reproduisent la logique de JUnit en Java standard, les exemples montrent le vrai code à utiliser dans vos projets Maven.

Ce que tu sauras faire

  • Écrire des tests unitaires JUnit 6 lisibles, nommés selon le comportement testé
  • Utiliser les assertions adaptées, y compris assertThrows, assertAll et les tolérances sur les décimaux
  • Organiser les tests avec @BeforeEach, @Nested et @DisplayName en garantissant leur isolation
  • Couvrir les cas limites avec des tests paramétrés (@ValueSource, @CsvSource, @MethodSource)
  • Isoler une classe de ses dépendances avec des fakes et des mocks Mockito

Programme des 5 leçons

    • Expliquer ce qu'apporte un test unitaire automatisé
    • Écrire un premier test JUnit 6 structuré en Arrange / Act / Assert
    • Lancer les tests avec Maven ou Gradle et lire le rapport

    Tests unitairesJUnit 6 (Jupiter)Structure Arrange / Act / Assert

  1. 02

    Les assertions JUnit et le test des exceptions

    18 min
    • Choisir l'assertion adaptée : assertEquals, assertTrue, assertNull, assertIterableEquals
    • Comparer des nombres décimaux avec une tolérance
    • Vérifier qu'une exception est levée avec assertThrows et grouper des vérifications avec assertAll

    Assertions JUnitassertThrowsassertAll

  2. 03

    Cycle de vie des tests et organisation

    16 min
    • Préparer un état neuf avant chaque test avec @BeforeEach
    • Comprendre l'ordre d'exécution des annotations de cycle de vie
    • Organiser une classe de test avec @DisplayName, @Nested et @Disabled

    Cycle de vie JUnitIsolation des tests@Nested et @DisplayName

  3. 04

    Tests paramétrés

    16 min
    • Exécuter un même test sur plusieurs jeux de données avec @ParameterizedTest
    • Choisir la bonne source : @ValueSource, @CsvSource, @MethodSource, @EnumSource
    • Couvrir les cas limites de façon systématique

    Tests paramétrés@CsvSourceCas limites

  4. 05

    Isoler le code : doubles de test et Mockito

    20 min
    • Rendre une classe testable grâce à l'injection de dépendances par constructeur
    • Distinguer fake, stub, mock et spy
    • Écrire un test Mockito avec @Mock, when/thenReturn et verify

    Doubles de testMockitoInjection de dépendances

Projet final

Suite de tests d'un service de commandes

On vous fournit (ou vous écrivez) un service CommandeService qui calcule le total d'une commande (remises par paliers, frais de port offerts à partir de 50 €), refuse les commandes invalides par des exceptions et appelle un dépôt et un service d'e-mail. Écrivez sa suite de tests complète dans un projet Maven : tests unitaires des règles de prix, tests paramétrés des paliers aux bornes, tests des exceptions et tests Mockito des interactions avec le dépôt et l'e-mail.

Livrables

  • Un projet Maven avec CommandeService dans src/main/java et ses tests dans src/test/java
  • Au moins 12 tests dont 2 tests paramétrés, 3 tests d'exception et 2 tests utilisant Mockito
  • La sortie de ./mvnw test montrant tous les tests au vert
  • Un court paragraphe listant un bug trouvé (ou introduit volontairement) et le test qui le détecte

Critères d'évaluation

  • Les noms de tests décrivent clairement le comportement vérifié
  • Les cas limites (bornes des paliers, commande vide, quantité négative) sont couverts
  • Les tests sont indépendants (préparation dans @BeforeEach, aucun état partagé modifiable)
  • Les mocks sont limités aux dépendances externes et verify est utilisé à bon escient
  • Tous les tests passent avec ./mvnw test

Questions fréquentes

JUnit 5 ou JUnit 6 : lequel apprendre ?

Le cours utilise JUnit 6, la version actuelle, avec Java 25. JUnit 5 et JUnit 6 partagent la même API Jupiter (org.junit.jupiter.api) : @Test, les assertions et les tests paramétrés s'écrivent de la même façon. JUnit 6 exige Java 17 ou plus et aligne les numéros de version de tous ses modules ; ce que vous apprenez s'applique aussi à un projet resté en JUnit 5.

Dois-je installer JUnit pour suivre le cours ?

Non pour les exercices de la plateforme, qui reproduisent la logique de JUnit en Java standard. Pour vos projets et l'exercice de mise en place, vous ajouterez la dépendance junit-jupiter (via le BOM junit-bom 6.x) à un projet Maven ou Gradle.

Qu'est-ce que Mockito et faut-il toujours l'utiliser ?

Mockito crée des doubles de test pour remplacer les dépendances (base de données, e-mail, API externe). Il est très utile, mais un simple fake en mémoire est parfois plus lisible : le cours vous apprend à choisir.

Ce cours aborde-t-il le TDD ?

Oui, le cycle rouge / vert / refactor est présenté dès la première leçon et peut être appliqué dans le projet final.

Ce cours, raconté pour ton métier

Dis ce que tu veux savoir faire : « Tests avec JUnit » prend sa place dans ton parcours, avec des exemples de ton secteur. Les notions restent celles du cours.

L'aperçu est gratuit, et les cours se suivent un par un sans payer. Le parcours ne contient que des leçons du catalogue.