Spring-Konfiguration für die eingebettete H2-Datenbank für Tests
Was bedeutet die Spring-Konfiguration für die integration-tests Aussehen wie ein embedded h2-datasource und, Optional, JUnit?
Meinen ersten versuchen mit einem SingleConnectionDataSource grundsätzlich funktionierte, aber nicht auf kompliziertere tests, in denen Sie benötigen mehrere verbindungen zur gleichen Zeit oder ausgesetzt Transaktionen. Ich denke, dass h2 in tcp-basierten server-Modus könnte so gut funktionieren, aber das ist wohl nicht der Schnellste Kommunikations-Modus für eine temporäre embedded-Datenbank im Arbeitsspeicher.
Was sind die Möglichkeiten und Ihre Vorteile /Nachteile? Auch, wie Sie die Tabellen erstellen /füllen der Datenbank?
Update: wir geben einige konkrete Anforderungen, die wichtig sind für solche tests.
- Der Datenbank sollten zeitlich befristet sein und im Speicher
- Sollte die Verbindung wohl nicht tcp verwenden, für die Anforderungen an Geschwindigkeit
- Es wäre schön, wenn ich könnte mit einem Datenbank-tool, überprüfen Sie den Inhalt der Datenbank, die während des Debuggens
- Wir müssen definieren einer Datenquelle, da wir nicht verwenden können, die Anwendung Server-Datenquelle in unit-tests
InformationsquelleAutor der Frage Hans-Peter Störr | 2010-01-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter dem VORBEHALT, dass ich nicht weiß, ob es irgendein tool, das prüft die Datenbank, ich denke, dass eine einfache Lösung wäre die mit der Feder embedded Datenbank ( 3.1.x-docs , aktuelle docs), die unterstützt HSQL, H2 und Derby.
Verwendung von H2, Ihre xml-Konfiguration könnte wie folgt Aussehen:
Wenn Sie lieber die Java-basierte Konfiguration können Sie instanziieren ein
DataSource
wie folgt aus (beachten Sie, dassEmbeddedDataBase
erstrecktDataSource
):Die Datenbank Tabellen werden erstellt, indem die db-schema.sql Skript, und Sie sind gefüllt mit Testdaten aus der db-test-Daten.sql Skript.
Vergessen Sie nicht, fügen Sie die H2-Datenbank-Treiber, um den classpath.
InformationsquelleAutor der Antwort matsev
Ich derzeit in einem test-nur springconfig-Datei als Datenquelle:
Erstellen /löschen der Tabellen kann erfolgen, indem executeSqlScript beim überschreiben AbstractAnnotationAwareTransactionaltests.onSetUpBeforeTransactionoder mit SimpleJdbcTestUtils.executeSqlScript an einem geeigneten Platz.
Vergleichen Sie auch dieses posting.
InformationsquelleAutor der Antwort Hans-Peter Störr
H2 wird zusammen mit einer integrierten Verbindungs-pool-Implementierung. Der folgende XML-Code enthält ein Beispiel der Verwendung von es als eine Datasource bean, ohne die Notwendigkeit der Einführung zusätzlicher Abhängigkeiten, die auf die DBCP oder C3P0:
Wird die Datenbank heruntergefahren werden, durch den Aufruf der dispose-Methode, wenn der Frühling Anwendungskontext schließt.
InformationsquelleAutor der Antwort ejboy
Ich denke, es ist am besten, um Ihre Produktion DataSource-Implementierung (nur mit unterschiedlichen connection-string) für die unit-tests.
Sowieso "nicht auf kompliziertere tests" nicht genügend Informationen für eine detaillierte Antwort.
(Selbst-ad : überprüfen Sie diese)
InformationsquelleAutor der Antwort Bozho