2013-02-06 9 views
5

Dołączyłem do projektu, który ma wiele plików z instrukcjami SQL do tworzenia bazy danych, która jest używana do testowania integracji.Tworzenie tymczasowej bazy danych działającej w różnych fazach testowania?

Zastanawiam się, w jaki sposób mogę użyć tych plików do utworzenia bazy danych dla testów jednostkowych (przy użyciu java i maven).

Mogę utworzyć bazę danych HSQL w pamięci dla każdego testu jednostkowego, a nawet użyć funkcji wścibskiej bazy danych jdbc, ale jest tak wiele instrukcji SQL do wykonania w konfiguracji testowej, że nie jest to skalowalne.

Chciałbym więc utworzyć tymczasową bazę danych (która ładuje instrukcje SQL) na początku fazy testowej, zlecić jednostce testowanie dostępu do tej tymczasowej bazy danych i wykonać różne operacje, a następnie usunąć tymczasową bazę danych koniec fazy testowej.

Przyjrzałem się funkcji sql-maven-plugin, która pozwoliłaby mi wykonywać fazy testowe, ale nie jestem pewien, jak skonfigurować tymczasową bazę danych, która będzie dostępna we wszystkich testach jednostkowych. Nie ma serwera, z którym można się połączyć, a baza danych w pamięci nie będzie działać w wielu testach jednostkowych (zakładam).

Jedną z opcji może być użycie unikalnego pliku tymczasowego, np. określanie adresu URL sterownika JDBC jako jdbc: hsqldb: file:/path/to/temporary/file, ale nie jestem pewien, jak wygenerować unikalny plik tymczasowy w aplikacji maven.

Wszelkie sugestie, jak to zrobić, lub czy jest lepsze podejście do podjęcia?

Aktualizacja: Postanowiłem użyć opartej na plikach bazy danych utworzonej w katalogu docelowym/db. Używam wtyczki maven clean, aby usunąć katalog docelowy/db przed uruchomieniem testów oraz wtyczkę maven sql, aby utworzyć bazę danych ze skryptów.

Odpowiedz

0
  1. Dlaczego nie utworzyć bazy danych H2 na dysku i mieć dostęp do każdego testu? Dopóki testy nie przebiegają równolegle lub nie współdziałają ze sobą, nie potrzebujesz serwera.

  2. Co więcej: po prostu utwórz bazy danych pamięci w @Before i usuń je w @ Po. Jesteś pewien, że to zbyt wolno?

  3. W teście przed integracją można uruchomić serwer H2 (lub derby) i zamknąć go w teście po integracji.

  4. Możesz napisać wtyczkę maven, która używa stanu sesji do śledzenia usług wbudowanej bazy danych, ale to tak samo jak (3).

+0

Dzięki za odpowiedź. Tak, powolne jest tworzenie całej bazy danych w @Before w każdym teście jednostkowym. Nie znam H2 ani derby, ale zajrzę do nich. –

+0

@Benson: Jak wspomniano na jednym z twoich innych postów wczoraj, jak zalecono w 4), faktycznie stworzyłem dla tego wtyczkę Mavena. – carlspring

3

W tym przypadku utworzyłem derby-maven-plugin. Jest dostępny w Maven Central, więc nie musisz dodawać żadnych dodatkowych repozytoriów ani niczego.

Można używać go tak:

<project ...> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.carlspring.maven</groupId> 
        <artifactId>derby-maven-plugin</artifactId> 
        <version>1.8</version> 
        <configuration> 
         <basedir>${project.build.directory}/derby</basedir> 
         <port>1527</port> 
        </configuration> 
        <executions> 
         <execution> 
          <id>start-derby</id> 
          <phase>pre-integration-test</phase> 
          <goals> 
           <goal>start</goal> 
          </goals> 
         </execution> 
         <execution> 
          <id>stop-derby</id> 
          <phase>post-integration-test</phase> 
          <goals> 
           <goal>stop</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </project> 

Więcej informacji można również sprawdzić USAGE.

Powiązane problemy