Réaliser ses tests d’intégration avec Spring Test DBUnit

Spring_framework

Spring Test DBUnit est une extension du module de test spring-test afin d'intégrer facilement le framework DBUnit. Il s'agit d'une extension officielle, écrite par l'un des principaux commiter officiel de Spring, Phill Web.

DbUnit fait partie des framework xUnit (PHPUnit, JUnit, etc.). Il permet en particulier de charger des données et éventuellement d'effectuer des opérations de vérification dessus.

Le framework spring inclut un module de test, spring-test, permettant de réaliser des tests d'intégration en démarrant un contexte spring pour réaliser les tests.

JAX-RS web service REST avec Spring (implémentation RestEasy)

L'objet de ce billet: Illustrer avec un exemple assez complet la mise en pratique du web service REST (JAX-RS) s'appuyant sur l'implémentation RestEasy de JBoss avec Spring 2.5.
L'exemple repose sur les briques (api) suivantes. Notez bien la version lorsqu'elle est mentionnée.

  • RestEasy: L'implémentation Jboss de jax-rs (JSR 311),
  • Spring 2.5 et les annotations,
  • Hibernate pour la partie persistence
  • L'api Dozer v4.0 pour les DTO (Data Transfert Objetc) ou VO((Value Object).
  • Junit 4.4,
  • HttpUnit,
  • XMLUnit.

Nota:La version Dozer 4.0 a renommé complètement ses packages. Certains tutos sur le web sont donc caduques.
C'est à la fin de l'étape 5 que nous détaillons l'emploi de l'api Dozer.

Quelques repères:

REST (Representational State Transfer) développé par Roy Fielding qui est l’un des fondateurs du protocol HTTP.
JSR 311 est la spec JAX-RS: Java API for RESTful Web Service. Finalisée en mars 2008.

Les CINQ principes de REST

  • P1: Tout est ressource, un identifiant unique à chaque ressource (http://localhost:8888/clients/2 pointe sur le client ayant id=2),
  • P2: Utiliser les méthodes HTTP (HEAD/GET/POST/PUT/DELETE). Et les erreurs standards HTTP,
  • P3: Les échanges avec plusieurs représentations ( xml,(x)html, json,..),
  • P4: Échanges sans état (stateless),
  • P5: Lier les ressources entre elles.

PRÉ-REQUIS: Java5.

Tests JUnit4 combiné avec Spring et Spring MVC en mode transactionnel

Le titre de ce billet montre bien l'étendue des thèmes variés qui seront traités. Il a pour objectif d'illustrer, à l'aide d'un exemple assez complet et proche des cas réels, la mise en place des tests, en mode transactionnel, pour les différentes couches applicatives. Ainsi les vraies difficultés rencontrées par les développeurs seront évoquées.

Le billet traite JUnit4 enrichi avec les annotations de Spring 2.5+ et ses lanceurs pour exécuter facilement les tests.
Des illustrations en mode transactionnel vous sont proposées à la fin de ce billet.
Le framework JUnit est l'oeuvre conjointe de Kent Beck (créateur de XP) et Erich Gamma (auteur des Design Patterns).
Avec la version 4, JUnit tente de rattraper son retard sur Testng tout en gardant la compatibilité avec JUnit3x ainsi qu'une parfaite intégration aux éditeurs Eclipse, Netbeans, ...

Avec les lanceurs de spring, les tests deviennent plus attrayants. Spring encourage ainsi à adopter l'approche TDD "Test Driven Design" ou "Test-First Developpment".
Notez que le jdk5+ est nécessaire pour certaines parties de code Java. Les commentaires dans le code java le mentionnent au bon endroit.