Bonjour,
Je me tourne vers vous, après avoir longuement cherché, pour un problème "Error while doing a clean insert : Integrity constraint violation" avec DbUnit lors des tests d'intégration.
Ce problème apparaît lors de tests avec des classes reliés avec d'autres classes sur lesquelles il y a des contraintes d'intégrité et en particulier, lors de l'appel à DatabaseOperation.CLEAN_INSERT.execute(...) après l'exécution de la méthode de test, dbunit n'enlève pas dans un ordre correct les objets persistés.
Voici les solutions retenues que j'ai appliqué sans succès :
- FAQ Dbunit : utiliser dataset=new FilteredDataSet(new DatabaseSequenceFilter(getConnection()), dataset); dans la méthode DbUnitHelper.getDataSet() : tjs pareil
- Déclarer un DOCTYPE dans le fichier xml contenant les données à intégrer : tjs pareil
- la pire : commenter tous les tests d'une classe sauf un...
La solution de contournement retenue pour continuer à faire les tests est de passer en v3 pour Spring, de créer un fichier de contexte contenant <jdbc:initialize-database data-source="dataSource">
<jdbc:script location="test.resources.db.hsqldb.populateHsqlDB.sqlpopulateHsqlDB.sql"/>
</jdbc:initialize-database>
et de ne plus utiliser dbUnit.
Malheureusement, cette solution est plutôt moyenne, je préférerai vraiment continuer à utiliser DbUnit avec des dataset en xml.
Merci pour vos conseils et solutions, ce problème avec DbUnit est vraiment bloquant.
les versions
DbUnit : 2.4.0
Hsqldb : 1.8.0.10
Spring : 2.5
Partager