Ecrire une TestSuite avec Eclipse et JUnit 4
December 7, 2006
La dernière fois que j'ai utilisé JUnit pour faire des tests unitaires, l'intégration avec Eclipse était plutôt bien faite et surtout, le monde n'était pas encore passé à Java 5. Je me suis remis dernièrement aux tests unitaires et j'ai découvert la puissance de Junit 4 et des annotations.
Evidemment tout cela ne va pas sans heurt. Il y a 2 ans j'aurais écrit une TestSuite comme celles générées par l'actuel plugin JUnit d'Eclipse, par exemple:
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite(
"Test for default package");
suite.addTestSuite(Test1.class);
suite.addTestSuite(Test2.class);
suite.addTestSuite(Test3.class);
return suite;
}
}
Le problème, c'est que cette TestSuite ne tourne plus sous JUnit 4 ! En effet, l'architecture de JUnit a été complètement repensée et nettoyée.
Là où intervient toute la puissance des annotations, c'est que maintenant ma TestSuite ressemble à ça:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses(value={
Test1.class,
Test2.class,
Test3.class,
})
public class AllTests{
}
Code propre, clair, rapide à écrire - et même simple à générer ! Merci les gens :)
Evidemment tout cela ne va pas sans heurt. Il y a 2 ans j'aurais écrit une TestSuite comme celles générées par l'actuel plugin JUnit d'Eclipse, par exemple:
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite(
"Test for default package");
suite.addTestSuite(Test1.class);
suite.addTestSuite(Test2.class);
suite.addTestSuite(Test3.class);
return suite;
}
}
Le problème, c'est que cette TestSuite ne tourne plus sous JUnit 4 ! En effet, l'architecture de JUnit a été complètement repensée et nettoyée.
Là où intervient toute la puissance des annotations, c'est que maintenant ma TestSuite ressemble à ça:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses(value={
Test1.class,
Test2.class,
Test3.class,
})
public class AllTests{
}
Code propre, clair, rapide à écrire - et même simple à générer ! Merci les gens :)