PostgreSQL nie jest serwerem osadzanym w pamięci. Nie można go po prostu załadować jako bibliotekę i uruchomić.
Potrzebny będzie kod kontrolny wiązki testowej, aby:
-
initdb
tymczasowy katalog danych -
Edytuj
postgresql.conf
zgodnie z wymaganiami, dołączając wiersze lub włączającinclude_dir
i upuszczanie w nim plików. Jeśli potrzebujesz tylko trywialnej konfiguracji, możesz pominąć ten krok; rzeczy takie jakport
można ustawić za pomocą zmiennych środowiskowych, a wiele innych można ustawić za pomocą-c
flagi do polecenia uruchamiania serwera. -
wygeneruj losowy numer portu do użycia
-
Uruchom serwer - uruchom
postgres -D the_datadir
nowa instancja serwera używającaProcess
Javy kierownictwo. Możesz przekazać niestandardowe wartości konfiguracji za pomocą-c
i może również ustawić zmienne środowiskowe, aby kontrolować zachowanie. -
Połącz się przez JDBC i
CREATE DATABASE
następnie uruchom konfigurację testową -
Przeprowadź testy
-
Zatrzymaj serwer, zabijając uruchomiony proces.
-
Usuń katalog danych
Będziesz chciał zarządzać procesami w klasie z odpowiednią obsługą katalogu tymczasowego, czyszczeniem przy nieczystym wyjściu (zabij serwer Pg i usuń katalog danych w przypadku wyjątku) itp.
Będę zaskoczony, jeśli nie możesz znaleźć kodu uprzęży testowej w puszkach do wypożyczenia. Zastanawiam się, czy powinniśmy dodać trochę do PgJDBC i zapakować je w sterownik? Jeśli znajdziesz coś dobrego lub napiszesz coś dobrego, powiadom mnie, komentując tę odpowiedź, a rozważę włączenie jej jako klasy użytkowej w PgJDBC.
To powiedziawszy, znacznie częściej zamiast tego uruchamia się testy w nowo utworzonej testowej bazie danych w istniejącej instancji PostgreSQL, która już działa na twoim serwerze. Po prostu konfigurujesz zestaw testów z nazwą użytkownika/hasłem/hasłem/hostem/portem/bazą danych PostgreSQL (lub pozwalasz mu połączyć się z postgres
bazy danych i CREATE
i DROP
baza danych). W końcu zawsze będzie wymagana pewna konfiguracja:instalacja lub kompilacja PostgreSQL, upewnienie się, że binaria znajdują się na PATH
itp.
Inną opcją jest użycie Amazon RDS:użyj interfejsów API AWS RDS, aby uruchomić nową instancję PostgreSQL i użyć jej do testów. Prawdopodobnie nie jest to praktyczne, chyba że twoje testy działają przez długi czas ze względu na czas konfiguracji i minimalny czas działania, ale jest to inna opcja, podobnie jak podobna usługa w Heroku.