spring-test-dbunit : DBUnit dans vos tests Spring

Il est assez courant de s’appuyer sur DBUnit pour charger et décharger des jeux de tests en base de données, que ce soit lors de tests “unitaires” d’une couche DAO ou lors de tests d’intégration.
Les formats XML supportés permettent de saisir rapidement des jeux de données plutôt que de réaliser un script SQL peu lisible et donc difficilement maintenable.

Assez souvent, le code de chargement et déchargement DBUnit est relativement lourd et est placé dans les méthodes @BeforeClass/@AfterClass, voire dans les @Before/@After.
Il est également possible d’utiliser le support DBUnit présent dans Unitils, mais il faut dans ce cas se conformer à une syntaxe différente de celle de Spring (ex: @SpringBean pour injecter un bean, alors qu’on se traine déjà @Autowired, @Resource et @Inject…) et faire étendre vos classes de test d’une classe particulière. De plus, DBUnit embarque EasyMock, qui n’est pas forcément votre choix en matière de framework de mock (pour ma part, j’utilise plutôt Mockito).

spring-test-dbunit propose un support plug-and-play de DBUnit pour Spring Test. Il vous suffit :

* de déclarer DataSetTestExecutionListener.class parmi les @TestExecutionListeners
* d’annoter votre classe ou votre méthode @DataSet pour indiquer le fichier DBUnit à charger/décharger

Par exemple :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("applicationContext.xml")
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DataSetTestExecutionListener.class })
@DataSet
public class MyTest {

    @Autowired
    private IDao myDaoUnderTest;

    @Test
    public void testSomethingWithDao() {
        myDaoUnderTest.doSomething();
        ...
    }

    @Test
    public void testSomethingElseWithDao() {
        // data has been reloaded and won't conflict with what's been done in testSomethingWithDao
        myDaoUnderTest.doSomethingElse();
        ...
    }

    ...
}

Le code source est disponible sous GitHub à l’adresse suivante:
https://github.com/excilys/spring-test-dbunit

Les binaires sont disponibles dans le repository Excilys :

1
2
3
4
<repository>
    <id>excilys-release</id>
    <url>http://repository.excilys.com/content/repositories/releases</url>
</repository>
1
2
3
4
5
<dependency>
    <groupId>com.excilys.utils</groupId>
    <artifactId>spring-test-dbunit</artifactId>
    <version>1.1.0</version>
</dependency>

N’hésitez pas à consulter la javadoc et le code de test pour plus d’explications.

VN:R_U [1.9.22_1171]
Rating: +2 (from 2 votes)
Share
Ce contenu a été publié dans Spring, avec comme mot(s)-clef(s) , , , , . Vous pouvez le mettre en favoris avec ce permalien.

5 réponses à spring-test-dbunit : DBUnit dans vos tests Spring

  1. Petit apparté : le repository Nexus me semble bien lent… est-ce intrinsèque au produit, ou bien avez-vous utilisé une vielle VM qui tourne bon gré mal gré pour l’héberger ?

    Firebug a mesuré 14 secondes pour charger la page (cache vide). C’est abusé… en fait, 12 secondes sont passées à télécharger le JS suivant http://repository.excilys.com/js/sonatype-all.js?1.9.0.1 .

    Il pèse 1.1 Mo !! WTF ???

    Par ailleurs, c’est quoi la procédure si on veut publier des artifacts sur le repository Excilys ?

    Bon sinon, sur l’article en lui même, j’y repenserai dès que j’aurai besoin d’utiliser DbUnit ;-). Bonne initiative!

    VN:R_U [1.9.22_1171]
    Rating: 0 (from 0 votes)
  2. La version 1.1.0 est disponible.

    VN:R_U [1.9.22_1171]
    Rating: 0 (from 0 votes)
  3. Le projet a été refondu :
    http://github.com/excilys/spring-dbunit

    1
    2
    3
    4
    5
    <dependency>
        <groupId>com.excilys.ebi.spring-dbunit</groupId>
        <artifactId>spring-dbunit-test</artifactId>
        <version>1.0.0</version>
    </dependency>
    VN:R_U [1.9.22_1171]
    Rating: 0 (from 0 votes)
  4. Audrey Romanet dit :

    La dernière version disponible est la 1.1.12 !

    @Stéphane : la plupart des docs sur https://github.com/excilys/spring-test-dbunit ne sont plus dispo…

    VN:R_U [1.9.22_1171]
    Rating: 0 (from 0 votes)
  5. @Audrey Parce que comme indiqué dans le commentaire ci-dessus, le projet a été refondu. La doc se trouve donc maintenant à l’adresse suivante: https://github.com/excilys/spring-dbunit/wiki

    VN:R_U [1.9.22_1171]
    Rating: 0 (from 0 votes)

Laisser un commentaire