Ich kann Frühling zum Erstellen und Embedded-Datenbanken initialisieren entweder programmatisch:Wie verwende ich Spring eingebettete Datenbankinitialisierungsskripte während der Integrationstestphase?
@Before
public void setUp() {
database = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("schema.sql")
.addScript("init.sql")
.build();
....
}
oder über Spring-Konfiguration:
<jdbc:initialize-database data-source="dataSource">
<jdbc:script location="classpath:schema.sql"/>
<jdbc:script location="classpath:init.sql"/>
</jdbc:initialize-database>
Hier meine Skripte schema.sql
und init.sql
im Verzeichnis src/test/resources
gespeichert sind. Also, wenn Tests die eingebettete databse verwenden laufen mit:
mvn test
dann die Dateien, in src/test/resources
sein verfügbar sind, und alles ist in Ordnung.
Aber jetzt nehme ich will zusammen die eingebettete Datenbank stattdessen verwenden mit einem eingebetteten Webserver (Jetty oder eingebettet Tomcat) in einem Integrationstest, lief über
mvn integration-test
Jetzt in dieser späten Phase I Ich möchte einen fast End-to-End-Test durchführen, bei dem bestimmte URLs für den Webdienst die erwarteten HTTP-Antworten zurückgeben, wobei bestimmte Daten in der eingebetteten Datenbank vorausgesetzt werden. Aber an diesem Punkt, die im eingebetteten Webserver eingesetzt Krieg hat keine Dateien von src/test/resources
so mein Initialisierungsskripts nicht vorhanden ist, und ich erhalte die Fehler
Verursacht durch: java.io.FileNotFoundException: Klassenpfad Ressource [ schema.sql] kann nicht geöffnet werden, da es nicht
Jetzt ist alles existiert wird Arbeit, wenn ich die Skripte in src/main/resources
setzen, aber diese Skripte sind nur für eine eingebettete Datenbank für Testen Auffüllen und sie es nicht tun gehören in der Kriegsdatei überhaupt. Weiß jemand, wie man einen Integrationstest einrichtet, so dass eine emedded Datenbank verwendet werden kann, ohne die tatsächliche Kriegsakte zu verschmutzen, die eingesetzt wird?
Ich hatte gehofft, dass Spring eingebettete Datenbank Initialisierung könnte etwas anderes als eine Datei verwenden. Ich dachte über JNDI nach, aber das würde bedeuten, dass ich die Datei web.xml mit einer Ressourcendefinition für Testdaten verschmutzen müsste, die (wieder) im entfaltbaren Krieg erscheinen würden. Oder vielleicht gibt es Optionen mit Fracht? Einige programmatische Tricks mit Spring, die ich nicht kenne?
$ {project.basedir} - Kann maven werden Variablen innerhalb Feder Kontext verwendet? –