Tests unitaires avec JUnit

Introduction aux tests en Java

Maria Milusheva

Senior Software Engineer

Test unitaire – définition

Deux notions clés :

Unité : plus petite partie testable d'une application, comme une méthode

Test unitaire : test qui vérifie l'exactitude d'une seule « unité » de code isolée du reste de l'application

Introduction aux tests en Java

Le test unitaire porte sur les détails

Notes :

  • Le test unitaire vise de petites portions de logique, pas la vue d'ensemble

  • D'autres types de tests couvrent la vue d'ensemble (p. ex. intégration)

  • JUnit doit son nom à son principal usage : les tests unitaires

Graphique illustrant intuitivement la relation entre les tests unitaires et le code de production

Introduction aux tests en Java

Types de tests – aperçu rapide

  • Dans ce cours, nous verrons surtout les tests unitaires et d'intégration
  • Mais il existe de nombreux types de tests !

Schéma des tests logiciels, incluant les tests fonctionnels (ex. tests unitaires) et non fonctionnels (ex. ergonomie)

Introduction aux tests en Java

Types de tests – aperçu rapide

  • Dans ce cours, nous verrons surtout les tests unitaires et d'intégration
  • Mais il existe de nombreux types de tests !

Schéma des tests logiciels, incluant les tests fonctionnels comme les tests unitaires, et les tests non fonctionnels comme l'ergonomie. Cette version encercle les tests unitaires et d'intégration

Introduction aux tests en Java

Syntaxe JUnit : assertTrue() et assertFalse()

  • assertTrue() vérifie qu'une affirmation est vraie :
List<String> list = new ArrayList<>();

assertTrue(list.isEmpty()); // Aucune erreur
  • assertFalse() vérifie l'inverse :
List<String> list = new ArrayList<>();
list.add("A");

assertFalse(list.isEmpty()); // Aucune erreur
Introduction aux tests en Java

assertNull() et assertNotNull()

Les variables null peuvent causer des NullPointerException !

  • Assertions pour vérifier si une variable est ou non null : assertNull() et assertNotNull()

  • Cas courant : vérifier qu'une valeur récupérée n'est pas nulle

Map<String, Integer> catalogue = new HashMap<>();

catalogue.put("item1", 10);

// Aucune erreur
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Introduction aux tests en Java

Vérifier les exceptions

Supposons que vous vouliez vérifier qu'une ArrayIndexOutOfBoundsException est levée :

public String getIndex(String[] array, int index) {
    return array[index];
}

JUnit offre plusieurs façons de le faire !

Introduction aux tests en Java

assertInstanceOf()

  • JUnit fournit assertThrows(), mais cela utilise une syntaxe Java avancée (expressions lambda)

  • Vous pouvez utiliser assertInstanceOf() ainsi :

try {
    getIndex(new String[]{}, 4);
} catch (Exception e) {
    // Passez la classe attendue de l'exception et l'exception elle‑même  
    assertInstanceOf(ArrayIndexOutOfBoundsException.class, e); 
}
1 https://www.baeldung.com/junit-assert-exception
Introduction aux tests en Java

Nommer les tests unitaires

  • Un projet typique contient des centaines de tests unitaires

  • Ils doivent être légers et faciles à comprendre

  • Donnez-leur des noms parlants pour repérer d'un coup d'œil la cause d'un échec

Par exemple : methodUnderTest_expectedBehavior_conditions()

1 https://dzone.com/articles/7-popular-unit-test-naming?fromrel=true
Introduction aux tests en Java

Passons à la pratique !

Introduction aux tests en Java

Preparing Video For Download...