Feder-/Winterschlafentests: Einfügen von Testdaten nach DDL -Erstellung
-
25-09-2019 - |
Frage
Ich habe einen Frühlings-/Hibernate-WebApp mit einigen Integrationstests, die in einer HSQL-Datenbank in Memory ausgeführt werden. Hibernate nimmt diese leere Datenbank ein und erstellt alle meine Testtabellen und Einschränkungen dank Hbm2ddl = create. Ich habe jedoch eine neue Bean, die während ihrer NacherpropertieSt () -Methode einen bestimmten Konfigurationswert aus der Datenbank überprüft. Wenn diese Bean initialisiert wird, muss eine solche Zeile in der Datenbank vorhanden sein.
Gibt es eine gute Möglichkeit, ein Java/Spring/Hibernate -Äquivalent zu den Testvorrichtungen von Rail zu errichten? Ich versuche einen Weg zu finden, um den Hibernate zu sagen, "wenn Sie diese Tabelle erstellen, fügen Sie diese Zeilen unmittelbar danach ein". Ich konnte keinen Rückruf oder einen Haken finden, den ich hinzufügen konnte, aber vielleicht gibt es einen anderen Weg.
Lösung
Ich versuche einen Weg zu finden, um den Hibernate zu sagen: "Wenn Sie diese Tabelle erstellen, fügen Sie diese Zeilen unmittelbar danach ein."
Da Hibernate 3.1 eine Datei mit dem Namen namens einfügen kann import.sql
Im Laufe der Laufzeitklassen von Hibernate und zum Zeitpunkt des Schemasxports wird Hibernate die in dieser Datei enthaltenen SQL -Anweisungen nach dem Exportieren des Schemas ausführen.
Diese Funktion wurde in der angekündigt Rotterdam Jbug und Hibernate Import.sql Blogeintrag:
Import.sql: Importieren Sie Daten einfach in Ihren Unit -Tests
Hibernate hat eine nette kleine Funktion, die stark unterdokumentiert und unbekannt ist. Sie können ein SQL -Skript während der ausführen
SessionFactory
Erstellung direkt nach dem Datenbankschema -Erzeugung zum Importieren von Daten in einer neuen Datenbank. Sie müssen nur eine Datei mit dem Namen namens hinzufügenimport.sql
in Ihrem Klassenpfadwurzel und feststellen entwedercreate
odercreate-drop
wie deinhibernate.hbm2ddl.auto
Eigentum.Ich benutze es für Hibernate -Suche in Aktion, jetzt, wo ich das Abfragekapitel gestartet habe. Es initialisiert meine Datenbank mit einem neuen Datensatz für meine Unit -Tests. Jboss Seam verwendet es auch in den verschiedenen Beispielen viel.
import.sql
ist eine sehr einfache Funktion, ist aber zum Zeitpunkt sehr nützlich. Denken Sie daran, dass der SQL möglicherweise von Ihrer Datenbank abhängig ist (AH -Portabilität!).#import.sql file delete from PRODUCTS insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...'); insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');
Weitere Informationen zu dieser Funktion finden Sie unter Eyals Blog, Er schrieb einen schönen kleinen Eintrag darüber. Denken Sie daran, wenn Sie zusätzliche Datenbankobjekte (Indizes, Tabellen usw.) hinzufügen möchten, können Sie auch die Funktion für Auxiliary -Datenbankobjekte verwenden.
Es ist immer noch nicht wirklich dokumentiert.
Andere Tipps
In Hibernate 3.6 Die Konfiguration, mit der beliebige SQL -Befehle ausgeführt werden können, lautet:
hibernate.hbm2ddl.import_files
Sehen in http://docs.jboss.org/hibernate/core/3.6/reference/en-us/html_single/, bemerken, dass ein Fehler in der Dokumentation vorliegt: Die Eigenschaft ist import_files mit einem S am Ende.
Wenn Sie über Junit -Tests sprechen und verwenden AbstractTransactionAldataSourcespringContextTests Es gibt Methoden, die Sie überschreiben können, wie startupbeForetransaction die einen Haken für die vorbestimmten Testtabellendaten usw. liefern, usw.