Comment rétablir la base de données de retour à l'état initial à l'aide de dbUnit?
Je suis nouvelle dans les tests automatisés et dbUnit. Donc je voudrais avoir votre avis.
Je vais créer une suite de tests, qui sera exécuté de la manière suivante:
- créer une mémoire de la base de données H2
- exécuter des scripts DDL pour créer des tables
- exécuter dbUnit pour insérer des données initiales (appelons ça de la STATE0) qui sera utilisé par tous les tests.
- exécuter des tests
Jusqu'à il y il a l'air bien pour moi, mais ce que je ne comprends pas, comment puis-je revenir à la base de données de la STATE0 après une série de tests et changé les données?
Puis-je le faire avec dbUnit?
Ou avec autre chose?
Dois-je recréer la base de données avant chaque test?
Simple de ne pas commettre les transactions dans les tests n'est pas approprié pour moi, car les tests finira par exécuter plus d'une transaction peut être plus d'une connexion de base de données.
OriginalL'auteur Igor Mukhin | 2010-09-28
Vous devez vous connecter pour publier un commentaire.
DBUnit peut faire le travail de quatre automatiquement si vous écrivez votre
@BeforeClass
,@Before
et@After
méthodes correctement. E. g. dans notre projet, à l'aide de Derby, l'un de ces cas de test ressembleCe code met de dos (une sous-ensemble de) la DB schéma à l'état défini par
MyDataSet.xml
après chaque test. (Notez que, comme @Pascal commenté, la remise à zéro ne peut pas être toujours plein, si un test modifie un tableau qui n'est pas dans le jeu de données, il ne sera pas affectée par la@Before
/@After
méthodes.)FOO
et siMyDataSet.xml
ne comprend pasFOO
,FOO
ne sera pas "réinitialisé", à droite?vous avez probablement raison. L'être humain, il est toujours conseillé de vérifier que si je suis en cours d'exécution des tests qui impliquent la table
FOO
, cette table est en fait inclus dans le jeu de données.éter je suis d'accord avec cela. C'est juste que le nitpicker en moi n'a pas été totalement convaincu par le libellé de la dernière phrase 🙂 +1 de toute façon.
dans notre profession, il est presque toujours préférable à pinailler à l'avance que d'être désolé par la suite 🙂 Donc merci pour votre commentaire, j'ai mis à jour mes réponses (espérons-le) plus clair.
I trouver, il est très clair et tout à fait exact, maintenant.
OriginalL'auteur Péter Török
Pour initialiser la base de données pour le jeu de données initial, de mettre en œuvre ces méthodes dans votre cas de test :
Vous pouvez avoir les clés étrangères des contraintes si certains de vos tests d'insérer des lignes dans une table vide (non définis dans le jeu de données initial par exemple).
Il suffit d'ajouter cette table vide dans votre jeu de données sans ligne :
Ici, myemptytable a une clé étrangère vers mypopulatedtable. Si myemptytable n'a pas été défini, DBUnit voudrais essayer de supprimer le mypopulatedtable, mais échouera à cause de la contrainte. Si elle est définie, DBUnit va supprimer myemptytable lignes avant.
OriginalL'auteur Zofren