Premiers pas avec JUnit

Au cours de mon stage en entreprise, j’ai eu la chance de pouvoir découvrir un grand framework Java, JUnit. Il permet de réaliser des tests unitaires qui sont des tests réalisés sur de petites unités de code permettant de valider leur fonctionnement. Je vais aujourd’hui vous présenter quelques fonctionnalités de ce framework, principalement celles dont je me suis servi au cours de mon stage et qui permettent de réaliser très rapidement des tests unitaires sur vos applications.

JUnit Java

JUnit est une librairie Java souvent distribuée avec les principaux environnements de développement. Si vous n’avez pas la librairie sur votre machine, je vous invite à la récupérer sur ce site.

Construction d’un cas simple

JUnit permet le lancement de classes de test. Ces classes vont être lues et toutes les méthodes annotée @Test vont être exécutées. L’ordre d’exécution n’est pas fixe. Il est possible de le fixer avec l’annotation @FixMethodOrder(MethodSorters.NAME_ASCENDING). Certains préféreront créer une classe de test pour chaque méthode testée ce qui peut rendre plus clair la hiérarchie des tests.

Je souhaite réaliser une librairie de méthodes que je vais appeler LibraryClass.

La méthode à tester est simple. Je crée un package test et une classe CheckIfContainsTotoTest contenant la méthode annotée qui sera exécutée pour lancer mon test.

Ce genre de test est très simple et permet très rapidement de valider un état, mais on ne peut pas vérifier plus d’une chose à la fois. La classe Assert possède de nombreuses méthodes permettant de tester des comportements différents notamment des égalité entre tableaux, objets ou valeurs numériques.

Tests paramétrés

Nous allons maintenant mettre en place des tests paramétrés qui nous permettront de lancer très rapidement une série de tests différents.

Nous ajoutons donc l’annotaion RunWith pour définir notre classe comme étant paramétrée. Dès lors, en lançant le test, elle va chercher la méthode static annotée Parameterized. Cette méthode crée une collection de tableaux d’objets, chaque tableau servant à créer une instance du test. Une fois l’instance créée, le test est exécuté. Ici, la réponse attendue est passée en paramètre pour permettre à plus de test d’être fait en même temps. Trois tests sont donc exécutés.

Gestion des exceptions

Il est possible de tester la levée des exceptions, afin de vérifier qu’elle sont bien gérés dans la méthode.

Le mot clé expected attend une classe de type Throwable donc il est utilisable avec toutes les exceptions. Attention cependant, ce code n’est pas très précis, il sera valide peu importe la ligne de code qui lèvera l’exception à condition qu’elle soit présente dans la méthode testée. Afin d’obtenir un test plus précis, on peut utiliser un block try{} catch{} ou définir une règle via l’annotation Rule.

Before et After

Afin de préciser encore plus les tests, il est possible d’ajouter deux méthodes et de les annoter Before et After. Elles seront exécutées respectivement avant et après le test. La méthode exécutée après peut-être un moyen de supprimer une ligne insérée dans une base de données par un test par exemple.

L’utilisation de ce framework dans le cadre de mon stage m’aura appris l’utilité de ces tests lors de la modification de gros projets. En effet, s’ils sont suffisamment précis ils peuvent immédiatement alerter le développeur lorsqu’il modifie une classe pour son usage et que cela provoque des erreurs dans d’autres classes. Si vous voulez aller plus loin vous trouverez la documentation du framework à cette adresse

spacer

Laisser un commentaire