I. Qu'est-ce que junit ?

Junit est un paquetage de java permettant de réaliser des tests unitaires de classes. Les tests unitaires sont une méthode permettant de vérifier le bon fonctionnement d'une classe (ou plus généralement d'une fonction). Lorsque l'on réalise une classe, on définit les spécifications de celle-ci (Qu'est ce que les méthodes font exactement ? Comment sont gérés les cas limites (dépassement), etc.), les tests permettent d'automatiser la vérification de ces spécifications.

L'intérêt majeur est de vérifier le bon fonctionnement d'une classe indépendamment du reste de l'application. En effet, lorsque l'on commence à programmer, on écrit souvent l'ensemble des fonctions (sans les tester une par une) et on teste l'ensemble des fonctions d'un coup. On peut voir apparaître des erreurs, mais il est parfois très difficile de connaître l'origine du problème. Réaliser systématiquement de tests permet ainsi d'éviter ce genre de phénomène. On peut ainsi détecter des erreurs d'implémentation dès le début.

Pour obtenir des informations supplémentaires concernant junit, vous pouvez visiter ce lienjunit

II. Bref rappel : Création d'une classe de test

Je vais rappeler brièvement comment réaliser une classe de test pour junit.

Supposons que l'on souhaite tester une classe s'appelant MaClasse, on crée une classe supplémentaire (par exemple qui s'appelle : MaClasseTest ou TestMaClasse) qui contiendra l'ensemble des tests.

Cette classe hérite de la classe junit.framework.TestCase. Il faut donc noter qu'elle n'aura accès qu'au membre public de la classe MaClasse.

fichier de test MaClasseTest.java
Sélectionnez

public class MaClasseTest  extends junit.framework.TestCase
{
	public void testLecture()
	{
	   MaClasse m = new MaClasse();
	   /* on suppose que MaClasse contient une méthode lire()*/
	   assertTrue("testLecture", m.lire() == 3); 
	}
}

Cette classe ne contient pas de méthode main. Les méthodes exécutées seront celles qui commencent par test et qui sont déclarées public. (une méthode : public void _testMachin() ne sera donc pas exécutée). Pour information, sur un système Unix, on exécute cette classe via la commande : java junit.textui.TestRunner TestMaClasse (une fois qu'elle a été compilée)).

À noter que pour vérifier l'égalité, ou l'inégalité de deux valeurs, on utilise systématiquement les fonctions : assertTrue, assertEquals ou encore assertFalse, qui permettent de vérifier si des valeurs sont vraies, ou égales.

En général, une méthode de test teste une configuration possible de la classe et une méthode particulière.

Lorsque la classe de test sera exécutée, junit retournera le nombre de tests qui ont réussi, le nombre de tests qui ont échoué (et éventuellement le nombre d'erreurs suite à un "plantage" de la classe (par exemple, en écrivant dans une zone non allouée)).

III. Installation de junit

Pour réaliser des tests unitaires avec junit, il vous faudra tout d'abord télécharger le paquetage junit (téléchargeable sur le site junit.org). Il vous faudra décompresser le fichier dans un dossier. Supposons que le projet soit créé et qu'il contienne deux fichiers. L'un correspond à la classe Entier (qui dispose d'une méthode main) et l'autre à la classe de test de cette classe.

fichier Entier.java
Sélectionnez

public class Entier {
 
	final private int i;
 
	public Entier(int j)
	{ 
		i= j;
	}
 
	public int lire()
	{
		return i;
	}
 
	public static void main(String[] arg)
	{
		System.out.println("Méthode main de la classe Entier");
	}
}
fichier de test EntierTest.java
Sélectionnez

public class EntierTest  extends junit.framework.TestCase
{
	public void testLecture()
	{
	   Entier i = new Entier(3);
	   assertTrue("testLecture", i.lire() == 3);
	}
}

Compilation : En essayant de compiler le projet (Build/Compile project ou F7), on obtient le message d'erreur suivant dans le fichier EntierTest: package junit.framework not exist. En effet, lors de la compilation, la classe EntierTest hérite de la classe junit.framework.TestCase se trouvant dans la bibliothèque de junit. Mais comme celle-ci n'est pas intégrée, il vous faut l'intégrer manuellement. Allez dans Project, Project Properties. Puis cliquez sur l'onglet Required Librairies. Nous allons ajouter la bibliothèque junit. Faites new. Une fenêtre s'ouvre, faites add puis Add archive, ajoutez à présenter le fichier junit-4.1.jar qui se trouvait dans le fichier compressé téléchargé initialement. Vous pouvez donner un nom à la bibliothèque, par exemple junit. Acceptez les modifications.

Image non disponible
Ajout de la bibliothèque

Exécution : Maintenant que nous avons réussi à compiler le projet, nous allons chercher à exécuter les tests unitaires. En exécutant le projet, on se rend compte que c'est la méthode main de la classe Entier qui est exécutée. En exécutant directement le fichier de test, on obtient l'erreur : Exception in thread "main" java.lang.NoSuchMethodError: main. En effet, la classe EntierTest ne contient pas de méthode main. Il faut ajouter au projet une manière d'exécuter le fichier. Cela se fait en allant dans les propriétés du projet (Project/Project properties) puis JDKTools. Dans Select Tool type, mettez Run Application, puis créez avec new une nouvelle configuration d'exécution. Appelez là, par exemple junitexe, il faut laisser dans commande : "$[JavaHome]\bin\java.exe", mais changer les paramètres par -classpath "$[ClassPath]" junit.textui.TestRunner $[JavaClass].

Image non disponible
Ajout de la configuration d'exécution

Cochez ensuite la nouvelle configuration d'exécution. Vous pouvez exécuter le fichier et les tests se lanceront.

Pour repasser d'une configuration à une autre (donc par exemple pour exécuter à nouveau la méthode main de la classe Entier), il faut retourner dans Project/Project properties/JDKTools et cocher Default comme configuration (et junitexe pour faire un test unitaire). Evidemment, il est possible d'avoir plusieurs fichiers de tests unitaires, il faudra les exécuter un par un via Build/Execute File.

IV. Conclusion

J'espère que ce petit tutoriel vous a permis d'installer et exécuter vos premiers tests unitaires sous Jcreator. Pour toute remarque ou suggestion, vous pouvez m'envoyer un message privé.

V. Remerciements

Je tiens à remercier vienaviena et wichtounetwichtounet pour leurs relectures attentives.