Tests unitaires avec JUnit

Introduction aux tests en Java

Maria Milusheva

Senior Software Engineer

Test unitaire – définition

Deux notions clés :

Unité – la plus petite partie testable d'une application, par exemple une méthode

Test unitaire – un test qui vérifie, isolément du reste de l'application, la justesse d'une seule « unité » de code

Introduction aux tests en Java

Le test unitaire porte sur les détails

Remarques :

  • Le test unitaire cible de petites portions de logique, pas la vision d'ensemble

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

  • JUnit s'appelle ainsi car son principal usage est le test unitaire

Un schéma illustrant intuitivement la relation entre tests unitaires et code de production

Introduction aux tests en Java

Aperçu des types de tests

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

Schéma des tests logiciels incluant les tests fonctionnels comme les tests unitaires, et les tests non fonctionnels comme l'ergonomie

Introduction aux tests en Java

Aperçu des types de tests

  • Dans ce cours, nous verrons surtout les tests unitaires et d'intégration
  • Mais il existe bien d'autres 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 met en évidence les tests unitaires et d'intégration

Introduction aux tests en Java

Syntaxe JUnit : assertTrue() et assertFalse()

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

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

assertFalse(list.isEmpty()); // Pas d'erreur
Introduction aux tests en Java

assertNull() et assertNotNull()

Les variables null peuvent provoquer une NullPointerException !

  • Assertions pour vérifier qu'une variable est ou n'est pas null : assertNull() et assertNotNull()

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

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

catalogue.put("item1", 10);

// Pas d'erreurs
assertNotNull(catalogue.get("item1"));
assertNull(catalogue.get("item2"));
Introduction aux tests en Java

Vérifier les exceptions

Supposons que nous voulions vérifier qu'une ArrayIndexOutOfBoundsException est levée :

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

JUnit propose 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) {
    // Passer 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 voir d'emblée ce qui a échoué en cas d'erreur

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...