dimanche 20 mars 2011

Integration tests with JUnit and Spring


Récemment dans le framework Spring j'ai trouvé une classe très utile pour faire des tests d'integration avec la base de données - AbstractTransactionalJUnit4SpringContextTests.
Cette classe contient plusieurs méthodes utilitaires pour tester le code qui interagit avec la BD. Voici la liste des méthodes que j'ai utilisé pour créer les tests d'intégration très élégante - faciles à implémenter et lire:
Je vais décrire la stratégie la plus facile à écrire une classe de test d'intégration est la suivante:
  1. Ecrire une classe de tests qui hérite de AbstractTransactionalJUnit4SpringContextTests
  2. Définir une méthode setUp avec l'annotation @BeforeTest. Cette méthode va utiliser executeSqlScript pour préparer la base de données en y injectant les données qui sont nécessaires pour l'exécution de votre méthode de test. Attention, à ne pas utiliser les ";" à la fin des lignes avec SQL. Les lignes qui se terminent par le ";" seront ignorés par Spring.
  3. La méthode de test qui va faire des "asserts" sur le nombre des lignes insérées dans les différentes tables impactés par les opérations DAOs. Pour faire ces asserts la méthode countRowsInTable est la plus appropriées.
  4. Pour que la base de données reste dans son état initial, il faut supprimer maintenant toutes les données qui ont y été ajoutées par deux étapes précédentes. Pour cela, il suffit de créer une méthode tearDown annotée par @AfterTest, dans cette méthode vous pouvez appeler la méthode généreusement offerte par Spring - deleteFromTables.
Regardez les fonctionnalités complètes de cette classe sur le site officiel de Spring ici.