Compensation Ensemble de la Base de données (pour les tests unitaires avec Hibernate)
Mes tests unitaires utiliser Hibernate pour se connecter à un en mémoire de la base de données HSQLDB. J'espérais qu'il y aurait un moyen de l'effacer et recréer la base de données (l'ensemble de la base de données dont le schéma et toutes les données) dans JUnit est TestCase.setUp()
méthode.
- Si vous testez votre base de données, puis de l'omi, il n'est pas de tests unitaires.
- Je teste mon programme qui arrive à utiliser la base de données.
- Je me suis mise à l'essai d'une classe qui est utilisée pour accéder à des données dans la base de données
Vous devez vous connecter pour publier un commentaire.
vous pouvez config de votre fichier de configuration hibernate à force de base de données pour recréer vos tables et schéma à chaque fois.
mise en veille prolongée.hbm2ddl.auto valide Automatiquement ou exportations schéma DDL de la base de données lors de la SessionFactory est créé. Avec create-drop, le schéma de base de données seront supprimées lors de la SessionFactory est fermé de manière explicite.
par exemple, valider et mettre à jour | créer | create-drop
si vous ne voulez pas avoir cette config dans votre vraie hibernate configuration, vous pouvez créer une hibernate config pour les tests unitaires but.
Si vous utilisez le Printemps, alors vous pouvez utiliser le @Transactional attribut sur votre unité de test, et par défaut à la fin de chaque test unitaire toutes les données persistantes sera automatiquement annulée si vous n'avez pas besoin de s'inquiéter à propos de l'abandon des tables à chaque fois.
Je haa parcouru par un exemple ici http://automateddeveloper.blogspot.com/2011/05/hibernate-spring-testing-dao-layer-with.html
Et d'amorcer une nouvelle
SessionFactory
.De tests de point de vue, la meilleure pratique consiste à effacer les données après chaque test. Si vous utilisez create-drop, il passera également le schéma de la table. Cela provoque une surcharge de recréer le schéma à chaque fois.
Puisque vous utilisez hsql, qui fournit un mécanisme direct de tronquer, il serait la meilleure option dans ce cas.
Être prudent avec essuyant le monde et de départ sur frais à chaque fois. Bientôt, vous aurez probablement envie de commencer avec un "défaut" ensemble de données de test chargé dans votre système. Donc, ce que vous voulez vraiment est de revenir à la base de l'état avant chaque test est exécuté. Dans ce cas, vous souhaitez une Transaction qui rollsback avant chaque essai.
Pour ce faire, vous devez annoter la classe JUnit:
Et ensuite annoter chacun de vos méthodes de test avec @Transactionnelle: