
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.
Un test unitaire se construit en 3 parties (AAA), aprÚs avoir déterminer le scénario à tester :
- Arrange ~ initialisation des donnĂ©es et de lâĂ©tat des objets
- Act ~ exécuter le traitement
- Assert ~ comparer le rĂ©sultat obtenu avec le rĂ©sultat attendu et vĂ©rifier lâĂ©tat des objets
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.
@Testpour définir les méthodes de test
@BeforeAllpour dĂ©clencher une mĂ©thode avant lâexĂ©cution du premier test de la classe (par exemple pour initialiser des ressources partagĂ©es par plusieurs tests)
AfterAllpour dĂ©clencher une mĂ©thode aprĂšs lâexĂ©cution du dernier test de la classe (par exemple pour fermer des ressources partagĂ©es par plusieurs tests)
@BeforeEachet@AfterEachpour dĂ©clencher une mĂ©thode avant ou aprĂšs lâexĂ©cution de chaque test de la classe
@RunWithet@SuiteClassespour définir une campagne de test
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.
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.
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.
@Mock et la méthode statique mock().