📘

Les tests unitaires avec JUnit

JUnit est un framework de tests unitaires pour Java, notamment intégré par défaut dans les IDE Eclipse et IntelliJ.
📌
Pour aller plus loin : https://junit.org/junit5/docs/current/user-guide/#writing-tests

Un test unitaire se construit en 3 parties (AAA), aprÚs avoir déterminer le scénario à tester :

Quelques principes : ”un test a un objectif unique”, ”un test est le plus petit et simple possible”, ”chaque test est isolĂ© et ne dĂ©pend pas d’aucun autre test”, ”les tests sont exĂ©cutĂ©s rĂ©guliĂšrement (ce qui amĂšne Ă  l’automatisation)”.

Annotations JUnit


JUnit utilise des annotations pour diriger l’exĂ©cution des tests.

â„č
Un test est reprĂ©sentĂ© par une classe. Une campagne de tests est un ensemble de tests, donc un ensemble de classes, qui peuvent ĂȘtre exĂ©cuter de façon synchrone.

Méthodologie


On importe les packages issus de org.junit.*, qui donne accùs à des classes comme “org.junit.jupiter.api.Assertions”.

BP : il est recommandé de les importer en static : import static org.junit.jupiter.api.Assertions.assertEquals;

On crée une classe pour effectuer un (et un seul) test.

On lui ajoute une suite de mĂ©thodes pour effectuer le traitement, Ă  l’aide des annotations disponibles.

L’utilisation de la classe “org.junit.jupiter.api.Assertions” donne accĂšs Ă  un ensemble de mĂ©thodes permettant de tester si l’assertion testĂ©e est vĂ©rifiĂ©e (le test passe au vert = rĂ©ussite) ou non (le test passe au rouge = Ă©chec).

La mĂ©thode “assertThrows” permet de vĂ©rifier la levĂ©e d’une exception.

On peut crĂ©er une campagne de tests avec l’annotation @Suite, suivie des diffĂ©rentes classes (@SelectClasses) et packages (@SelectPackages) de tests Ă  exĂ©cuter.

â„č
L’exĂ©cution se fait de la mĂȘme maniĂšre que pour une classe de test unique. On a accĂšs au rĂ©sultat de l’exĂ©cution de chacune des classes.

Couverture des tests


La couverture de tests permet de mesurer le pourcentage de code vĂ©rifiĂ© par les tests et d’identifier les lignes de code testĂ©es et non testĂ©es.

⚙
EclEmma est un outil gratuit de mesure de la couverture de tests de code Java pour Eclipse.
📌
Pour aller plus loin : https://latavernedutesteur.fr/2017/11/03/les-couvertures-de-tests/ https://fr.wikipedia.org/wiki/Couverture_de_code

Notion de bouchon

Dans le cas d’un test unitaire, un seul composant est testĂ© indĂ©pendamment des autres. NĂ©anmoins, une mĂ©thode en appelle souvent d’autres, situĂ©es potentiellement dans des classes diffĂ©rentes, qui ont elles-mĂȘmes leurs dĂ©pendances.

La notion de bouchon (stub) permet de simuler le comportement des dépendances en fonction des scénarios du test.

On dit alors qu’on mock -on reproduit le comportement- de certaines dĂ©pendances.
⚙
Mockito un framework de mocking pour Ă©crire des tests unitaires en Java, qui s’appuie sur JUnit et s’utilise notamment avec l’annotation @Mock et la mĂ©thode statique mock().
📌
Pour aller plus loin : https://builtin.com/software-engineering-perspectives/mock-vs-stub https://blog.myagilepartner.fr/index.php/2018/05/31/quest-ce-le-stub-le-dummy-le-fake-le-psy-et-le-mock/