Date de création : 18 Décembre 2003
Dernière modification :
Diffusion : internet

JUnit - Les tests unitaires en Java

Introduction

Principes de base d'utilisation de JUnit.

Pour plus d'informations se reporter par exemple à : Java Extreme Programming Cookbook - Chapter 4: JUnit (PDF)

Pour voir comment utiliser ces concepts dans eclipse se reporter à : JUnit - Intégration à Eclipse

PRINCIPE DU TEST

Revient à :
•    Ecrire une classe qui étend junit.framework.TestCase par classe à tester (TrucTest.java pour tester Truc.java)
•    Ecrire des méthodes testXXX qui utilisent des fonctions JUnit de type assertYYY
•    Chaîner ces méthodes testXXX
•    Exécuter ces chaînes de test

LES METHODES ASSERTYYY

assertEquals
assertFalse et True
assertNull et NotNull
assertSame et NotSame

Deux formes

assertYYY(valeur1 [, valeur 2])
ou asserYYY(messageSiErreur, valeur1 [, valeur 2])

Recommandations

Une seule instruction assertYYY par méthode testXXX pour bien localiser le problème si le test échoue.

LA CLASSE QUI ETEND junit.framework.TestCase

exemple

import junit.framework.TestCase;
public class PersonneTest extends TestCase {
    public PersonneTest(String arg0) {
        super(arg0);
    }
    public void testToString() {
        Personne tmp = new Personne();
        assertEquals(tmp.toString(), "Raymond Bourges");
    }
    public void testToString2() {
        Personne tmp = new Personne("Anne", "Routeau");
        assertEquals(tmp.toString(), "Anne Routeau");
    }
    public void testgetAge(){
        Personne tmp = new Personne();
        tmp.setAge(-10);
        assertEquals(tmp.anneeNaissance(), 2004-10);
    }
}

possibilité supplémentaire

Possibilité d'écrire une méthode setUp() d'initialisation commune à tous les méthodes testXXX.
La méthode tearDown() a le rôle inverse.

CHAINAGE DES TESTS

Consiste à écrite une méthode de signature "Test suite()".
Dans cette méthode on crée un objet de type TestSuite

Le cas simple

return new TestSuite(TrucTest.class);
Où TrucTest est notre classe de test (qui étend TestCase) de la classe Truc

Plus fin

TestSuite tmp = new TestSuite();
Tmp.addTest(new TrucTest("testXXX1")); //on demande que la methode testXXX1 des TrucTest
Tmp.addTest(new TrucTest("testXXX2")); //puis que la methode testXXX2 des TrucTest
Return tmp;

Répétition de tests

Tmp.addTest(new RepeatedTest(new TrucTest("testXXX1"), 100));

Autres possibilités

Test des exceptions normales
Test en parallèles (thread, stresse)

Exemple

import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
    public static Test suite() {
        TestSuite suite = new TestSuite("Test for default package");
        //$JUnit-BEGIN$
        suite.addTest(new TestSuite(TestFailure.class));
        suite.addTest(new RepeatedTest(new TestSuite(PersonneTest.class),3));
        //$JUnit-END$
        return suite;
    }
}