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;
}
}