2012-08-09 12 views
12

mogę używać wiosny do tworzenia i zainicjować wbudowanych baz danych zarówno potrzeb programowego:Jak korzystać ze skryptów inicjujących wbudowaną bazę danych Spring podczas fazy testów integracji?

@Before 
public void setUp() { 
    database = new EmbeddedDatabaseBuilder() 
      .setType(EmbeddedDatabaseType.H2) 
      .addScript("schema.sql") 
      .addScript("init.sql") 
      .build(); 
    .... 
} 

lub poprzez konfigurację Wiosna:

<jdbc:initialize-database data-source="dataSource"> 
    <jdbc:script location="classpath:schema.sql"/> 
    <jdbc:script location="classpath:init.sql"/> 
</jdbc:initialize-database> 

Oto moje skrypty schema.sql i init.sql są przechowywane w katalogu src/test/resources. Więc jeśli badania przy użyciu wbudowanego databse są prowadzone z:

mvn test 

wtedy pliki, będąc w src/test/resources są dostępne, i wszystko jest w porządku.

Ale teraz przypuśćmy, że chcemy, zamiast korzystać z wbudowanej bazy danych wraz z wbudowanego serwera WWW (molo lub osadzone Tomcat) w teście integracji, prowadzony przez

mvn integration-test 

Teraz w tak późnej fazie I chcesz przeprowadzić prawie kompleksowy test, który powoduje, że niektóre adresy URL usługi sieci Web zwracają oczekiwane odpowiedzi HTTP, zakładając pewne dane we wbudowanej bazie danych. Ale w tym momencie, wojna wdrożony we wbudowanym serwerze internetowym nie ma plików z src/test/resources więc moje skrypty inicjalizacji nie są obecne, i pojawia się błąd

spowodowane: java.io.FileNotFoundException: class zasobów ścieżce [ schema.sql] nie można otworzyć, ponieważ nie istnieje

teraz wszystko będzie praca jeśli mogę umieścić skrypty w src/main/resources ale te skrypty są tylko do napełniania wbudowaną bazę danych dla testów i nie należą w pliku wojennym w ogóle. Czy ktokolwiek wie, jak skonfigurować test integracji, aby można było użyć emedded database, bez zanieczyszczania rzeczywistego pliku wojny, który zostanie wdrożony?

Miałem nadzieję, że inicjalizacja wbudowanej bazy danych Spring może korzystać z czegoś innego niż plik. Myślałem o JNDI, ale to chyba wymagałoby zanieczyszczania pliku web.xml definicją zasobu dla danych testowych, które (znowu) pojawią się w wojnie, którą można zastosować. A może są opcje przy użyciu ładunku? Jakieś programowe sztuczki ze Źródłem, których nie znam?

Odpowiedz

5

powinien być w stanie to zrobić:

<jdbc:initialize-database data-source="dataSource"> 
    <jdbc:script location="file:///${project.basedir}/src/test/resources/schema.sql"/> 
    <jdbc:script location="file:///${project.basedir}/src/test/resources/init.sql"/> 
</jdbc:initialize-database> 
+1

$ {project.basedir} - Może być stosowany Maven zmienne wewnątrz kontekstu Wiosny? –

Powiązane problemy