Optimisation du lancement des tests unitaires avec Spring

De iMDEO dans Technique

31 déc 2012

Si vous êtes dans le cadre d’intégration continu avec des projets Spring cet article peut vous intéresser.

Constatation

Si vous lancez vos tests avec le Runner SpringJUnit4ClassRunner.class le context Spring est chargé pour chaque classe de Test. Le chargement du context est souvent 10 fois plus long que le test en lui même. Plus vous avez de classes de Test, ce qui se produit normalement dans un projet, plus l’exécution des tests unitaires est longue.

Solution

Pour ne charger le context Spring qu’une seule fois, vous pouvez lancer une suite de tests. De cette manière le context est chargé une bonne fois pour toute.

Implémentation

Java

Créer une classe AllTestSuite.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.ClassnameFilters;
import org.junit.runner.RunWith;
/**
* La Class AllTestSuite.
*/
@RunWith(ClasspathSuite.class)
@ClassnameFilters({ ".*Test" })
public class AllTestSuite {
}

Cette classe s’appuie sur le junit Runner de classpathSuite

Elle va automatiquement détecter toutes les classes dont le nom match un pattern, ici toutes les classes dont le nom se termine par Test. Et les lancer au sein d’une suite de tests.

Maven

Il faut spécifier à Maven que l’on veut lancer les tests unitaires seulement sur notre suite de test. Pour cela il faut rajouter dans notre fichier pom.xml

<build>
<plugins>
<!– this configures the surefire plugin to run your tests with the javaagent enabled –>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>pertest</forkMode>
<workingDirectory>${basedir}/target</workingDirectory>
<includes>
<include>**/*TestSuite.java</include>
<include>**/TestSuite*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>

Conclusion

Et voila. Maintenant le temps d’exécution de vos tests est grandement réduit. Vous pouvez retourner et rajouter de nouvelles fonctionnalités à votre produit !

Commentaire

neuf + = 17

iMDEO recrute !

REJOIGNEZ-NOUS

A la recherche de nouveaux talents (développeurs web et mobile, chefs de projet,...)

Voir les annonces