Eclipse Photon – un meilleur support de JUnit 5 et des tests

Eclipse Photon propose des améliorations concernant les tests en Java : il permet notamment de définir des répertoires dédiés contenant le code des tests et propose un support de JUnit 5.1.

Cet article fait partie d’une série composée de :

 

Le support des répertoires de tests

La première étape est de créer un répertoire de source en lui donnant un nom.

eclipse_photon_tests_001

Dans les paramètres  » Java Build Path  » du projet, les répertoires sources possèdent un nouvel attribut  » Contains test sources  » qui permet de préciser qu’ils contiennent des sources de test.

Pour changer la valeur de cet attribut, il suffit de le sélectionner et de cliquer sur le bouton  » Toogle « .

eclipse_photon_tests_002

Comme indiqué sous la forme d’une erreur dans la boîte de dialogue, le résultat de la compilation des répertoires de tests doit être dans un répertoire dédié.

Pour cela, il faut cocher la case  » Allow output folders for source folders  » et sélectionner le répertoire concerné dans l’option  » Specific Output folder « .

eclipse_photon_tests_003

eclipse_photon_tests_004

Ainsi les tests peuvent être regroupés dans un répertoire dédié.

Les classes des sources n’ont pas accès aux classes de tests.

eclipse_photon_tests_005_o

La compilation d’un projet se fait maintenant en deux étapes :

  • La compilation des sources
  • La compilation des tests

Cela permet aux classes de tests d’avoir accès aux classes contenues dans les sources.

Deux  » Working Set  » dynamiques sont proposés :

  • Java Main Sources
  • Java Test Sources

Ils contiennent les répertoires contenant respectivement du code source ou du code de tests selon la valeur de l’attribut  » Contains test sources « . Il est alors possible de les utiliser par exemple dans un filtre.

eclipse_photon_tests_006

 

Les dépendances de tests

Il est possible de préciser des dépendances spécifiques aux tests dans le  » Build Path « . Pour les projets et les bibliothèques, il existe un attribut  » Visible only for test sources  » qui précise si la dépendance n’est utilisable que pour les tests.

eclipse_photon_tests_007

Par défaut, les icônes des répertoires et des dépendances utilisables uniquement pour les tests sont affichés avec une icône plus sombre.

eclipse_photon_tests_008

Ce comportement est configurable dans les préférences Preferences > Java > Appearance

eclipse_photon_tests_009

Les projets ajoutés comme dépendances peuvent contenir des répertoires de sources et des dépendances pour les tests qui sont visibles pour la compilation et l’exécution des tests. Il est possible de les rendre invisible en utilisant l’attribut  » Without test code « .

eclipse_photon_tests_010

Dans ce cas, le nom du projet est décoré avec la mention  » [without test code] « . Cette décoration est configurable dans les préférences Preferences > General > Appearance > Label Decorations

eclipse_photon_tests_011

Si le projet est un projet Java modulaire, les dépendances de tests telles que JUnit ne peuvent pas être référencées dans le module-info.java et elles ne seront donc pas visibles à la compilation. La solution utilisée lorsque des dépendances de tests sont placées dans le classpath est que le projet en cours de compilation est automatiquement configuré pour lire l’unnamed module lors de la compilation des sources de test.

eclipse_photon_tests_012

 

L’utilisation des répertoires de tests

Lors de l’utilisation de l’assistant pour créer un nouveau Test Case JUnit, les répertoires des sources de tests sont présélectionnés par défaut.

eclipse_photon_tests_013_o

Dans les configurations  » Run  » et  » Debug « , l’onglet  » ClassPath  » ou  » Dependencies  » possède une case à cocher  » Exclude TestCode « , cochée par défaut pour exécuter une classe dans un répertoire de source qui ne contient donc pas de tests.

eclipse_photon_tests_014

Lors de l’exécution de code Java 9 avec cette option décochée, des options sont ajoutées à la JVM pour permettre un accès à l’unnamed module.

 

Le support de JUnit 5.1

Dans la gestion des bibliothèques, lors de l’ajout de la bibliothèque JUnit

eclipse_photon_tests_015

La version utilisée pour JUnit 5 est la version 5.1.

eclipse_photon_tests_016

 

Des améliorations dans l’assistance

Lors de l’utilisation de l’assistant pour créer un nouveau cas de test

eclipse_photon_tests_017

Si JUnit n’est pas présent, l’assistant propose de l’ajouter.

eclipse_photon_tests_018

Il suffit de cliquer sur  » OK  » et les différents jars de JUnit 5.1 sont ajoutés au  » Build Path « .

eclipse_photon_tests_019

Un quick fix (Ctrl + 1) propose d’ajouter la dépendance vers JUnit 5 si une annotation est utilisée et que celle-ci n’est pas accessible.

eclipse_photon_tests_020

Plusieurs templates permettent de créer des méthodes de tests avec JUnit 5.1 :

  • test_jupiter pour créer une méthode de tests simple annotée avec @Test

    eclipse_photon_tests_021
  • test_factory pour créer une méthode de tests annotée avec @TestFactory

    eclipse_photon_tests_022

Les méthodes statiques des classes Assertions, Assumptions, DynamicContainer et DynamicTest de JUnit 5 sont ajoutées dans les  » Favorites « .

eclipse_photon_tests_023

Cela permet d’utiliser l’assistant de contenu (Ctrl + espace) en indiquant uniquement le début du nom de la méthode statique.

eclipse_photon_tests_024

Ou le Quick Fix

eclipse_photon_tests_025

 

De nouvelles fonctionnalités lors de l’exécution

Dans la configuration d’exécution, il est possible de préciser les tags à inclure ou exclure pour déterminer les tests JUnit 5 à exécuter.

eclipse_photon_tests_026_o

Une boîte de dialogue permet de saisir les tags avec la possibilité d’utiliser des opérateurs logiques

eclipse_photon_tests_027

Lorsqu’une méthode assertAll() échoue, il est possible comparer les différents résultats en utilisant l’option  » Compare Result  » du menu contextuel.

eclipse_photon_tests_028

La boîte de dialogue  » Result Comparaison  » permet de comparer les valeurs attendues et actuelles qui sont différentes.

eclipse_photon_tests_029

Dans la vue JUnit, le nombre de cas de tests exécutés est affiché avec entre parenthèses le nombre de cas de tests non exécutés dû à l’évaluation négative d’une supposition.

eclipse_photon_tests_030

Dans la vue JUnit, il est possible d’utiliser l’option  » Go to File  » du menu contextuel d’un cas de test pour ouvrir le fichier source du cas de test et se positionner sur la méthode correspondante.

eclipse_photon_tests_031

Dans la configuration d’exécution d’une classe contenant des tests JUnit, le type des arguments des méthodes est affiché lors de la sélection de la méthode de test à exécuter.

eclipse_photon_tests_032_o

Les informations publiées via une instance de type TestReporter de JUnit 5 passée en paramètre sont affichées dans la vue Console.

eclipse_photon_tests_033

Dans la vue JUnit, l’option  » Run  » du menu contextuel sur une classe annotée avec @Nested permet de demander la ré-exécution des cas de tests de la classe.

eclipse_photon_tests_034

Dans ce cas, les tests de la classe imbriquée sont re-exécutés.

eclipse_photon_tests_035

 

Conlusion

Photon propose (enfin) une séparation du code de production et du code des tests ainsi qu’un meilleur support de JUnit 5.