Vous êtes sur la page 1sur 18

• un framework mature pour permettre l'écriture et

l'exécution de tests automatisés.


• JUnit 4 (2005) pour prendre en compte les
annotations de Java 5.
• JUnit 5, (2017), utilise des fonctionnalités de Java 8
notamment les lambdas, les annotations répétées, ...
JUnit
§ Framework open source pour Java créé par Kent Beck (XP) et Erich Gamma
(GoF)
§ Permet d’automatiser les tests et de s’assurer que le programme répond
toujours aux besoins
§ Basé sur les assertions qui vérifient si les résultats de tests correspondent aux
résultats attendus
§ Membre de la famille XUnit (CPPUnit pour C++, CUnit pour C, PHPUnit pour
PHP...)
§ Test Case
− Classe contenant un certain nombre de méthodes de tests
− Permettant de tester le bon fonctionnement d’une classe (en testant ses méthodes)

19/2K20 TBM 58
1er Exemple
§ Step 1 : créer une classe main.Calcul

19/2K20 TBM 59
1er Exemple
§ Step 2 : créer sa classe Test Case

19/2K20 TBM 60
1er Exemple
§ Step 2 : créer sa classe Test Case

19/2K20 TBM 61
1er Exemple
§ Step 2 : Code généré
§ La méthode annotée
− @Test : pour identifier les méthodes
des cas de tests
− @BeforeAll : sera exécutée
seulement avant le premier test
− @AfterAll : sera exécutée
seulement après le dernier test
− @BeforeEach : sera exécutée avant
chaque test
− @AfterEach : sera exécutée après
chaque test

19/2K20 TBM 62
1er Exemple
§ Step 3 : Lancer le test

19/2K20 TBM 63
1er Exemple
§ Step 3 : Implémenter la méthode testSomme() et la méthode testDivision()
en testant chaque fois les cas particuliers

19/2K20 TBM 64
JUnit 5 - Overview
§ JUnit 5 est composé de plusieurs
modules différents issus de trois sous-
projets différents.
§ JUnit 5 = JUnit Platform + JUnit
Jupiter + JUnit Vintage
− Plusieurs jars qu'il faut ajouter au
classpath en fonction des besoins.
− Le plus simple est d'utiliser Maven.

2K21 TBM 65
Cycle de vie de Test : Pre/Post-Test
§ Dans certains cas
− Avant un test, il faut faire certains traitements : instancier un objet , se connecter à
une BD, ouvrir un fichier...
− Après le test, il faut aussi fermer certaines ressources : connexion à une base de
données, socket…
§ Pour cela utiliser les méthodes setUp() et tearDown() qui sont respectivement
exécutées avant et après l’appel de chaque méthode de test.

§ La méthode annotée
− @BeforeAll : sera exécutée seulement avant le premier test
− @AfterAll : sera exécutée seulement après le dernier test
− @BeforeEach : sera exécutée avant chaque test
− @AfterEach : sera exécutée après chaque test

19/2K20 TBM 66
Pre/Post-Test : Exemple
Si Avant un test, il faut faire certains traitements :
instancier un objet , se connecter à une BD, ouvrir un
fichier...
Pour cela utiliser les méthodes setUp() avec
@BeforeAll : sera exécutée seulement avant le
premier test
@BeforeEach : sera exécutée avant chaque test

Si Après le test, il faut aussi fermer certaines


ressources : connexion à une base de données,
socket…
Pour cela utiliser la méthodes tearDown() avec
@AfterAll : sera exécutée seulement après le
dernier test
@AfterEach : sera exécutée après chaque test

19/2K20 TBM 67
1er Exemple – cas d’échec
§ Provoquer une erreur dans le code de la méthode somme

19/2K20 TBM 68
Les assertions
§ Les assertions ont pour rôle de faire des vérifications pour le test en cours.
− Si ces vérifications échouent, alors l'assertion lève une exception qui fait échouer le
test.

§ JUnit Jupiter contient la plupart des assertions de JUnit 4 mais propose aussi
ses propres annotations dont certaines surcharges peuvent utiliser les lambdas
(Java 8).
§ Ces assertions sont des méthodes static de la classe
org.junit.jupiter.Assertions.

§ Les assertions classiques permettent de faire des vérifications sur une instance
ou une valeur ou effectuer des comparaisons.

2K21 TBM 69
Test avec les assertions
§ JUnit offre un ensemble de méthode d’assertion
§ assertTrue(condition , message) : permet de vérifier que la condition fournie
en paramètre est vraie
§ assertFalse(condition, message) : permet de vérifier que la condition fournie
en paramètre est fausse
§ assertEquals(expected, actual, message) : permet de vérifier l’égalité (sa
réciproque est assertNotEquals)
§ assertNotNull(object, message) permet de vérifier, pour les paramètres
utilisés, qu’une méthode ne retourne pas la valeur null (sa réciproque est
assertNull)

§… Remarque
En l’absence d’un message explicite, un message par défaut sera affiché.
Les méthodes assertXXX() peuvent aussi avoir la signature suivante :
assertXXX(valeurAttendue, appelDeMethodeATester, message )
19/2K20 TBM 70
JUnit 4 vs JUnit 5

19/2K20 TBM 71
JUnit 4 vs JUnit 5

19/2K20 TBM 72
Annotation JUnit
§ @Disabled : désactiver le test
§ @RepeatedTest : répéter un test plusieurs fois

§ @ParameterizedTest pour paramétrer un test

19/2K20 TBM 73
Annotation JUnit
§ @DisabledOnOs | @EnabledOnOs : activer | désactiver un test selon
l’OS

§ @DisabledOnJre | @EnabledOnJre : activer | désactiver un test


selon la version de JRE

§ @DisabledIf | @EnabledIf : activer | désactiver un test selon la


valeur d’un test logique (ou une regex)

19/2K20 TBM 74