PostgreSQLはメモリ内の埋め込み可能なサーバーではありません。ライブラリとしてロードして実行するだけでは不十分です。
次の目的でテストハーネス制御コードが必要になります:
-
initdb
一時的なデータディレクトリ -
postgresql.conf
を編集します 必要に応じて、行を追加するか、include_dir
を有効にします それにファイルをドロップします。些細な設定のみが必要な場合は、この手順をスキップできる可能性があります。port
のようなもの 環境変数を介して設定でき、他の多くは-c
で設定できます サーバー起動コマンドへのフラグ。 -
使用するランダムなポート番号を生成する
-
サーバーを起動します-
postgres -D the_datadir
を実行します JavaのProcess
を使用する新しいサーバーインスタンス 管理。-c
を使用してカスタム構成値を渡すことができます また、動作を制御するために環境変数を設定することもできます。 -
JDBCと
CREATE DATABASE
を介して接続します 次に、テストセットアップを実行します -
テストを実行する
-
起動したプロセスを強制終了してサーバーを停止します。
-
datadirを削除します
適切な一時ディレクトリ処理、クリーンでない出口でのクリーンアップ(Pgサーバーを強制終了し、例外でdatadirを削除する)などを使用して、クラスでプロセス管理を実行する必要があります。
これのために借りる缶詰のテストハーネスコードが見つからない場合、私は驚かれることでしょう。 PgJDBCにいくつか追加して、ドライバーにバンドルする必要があるのでしょうか。何か良いものを見つけたり、何か良いものを書いたりした場合は、この回答にコメントしてpingしてください。PgJDBCのユーティリティクラスとして含めることを検討します。
とはいえ、代わりに、サーバー上ですでに実行されている既存のPostgreSQLインスタンスで新しく作成されたテストデータベースでテストを実行する方がはるかに一般的です。 PostgreSQLのユーザー名/パスワード/ホスト/ポート/データベースを使用してテストスイートを構成するだけです(またはpostgres
に接続させます) データベースとCREATE
およびDROP
データベース)。結局のところ、いくつかの構成が常に必要になります。PostgreSQLをインストールまたはコンパイルし、バイナリがPATH
にあることを確認します。 、など。
もう1つのオプションは、AmazonRDSを使用することです。AWSRDSAPIを使用して新しいPostgreSQLインスタンスを起動し、それをテストに使用します。これは、セットアップ時間と最小実行時間のためにテストを長時間実行しない限り、おそらく実用的ではありませんが、Herokuの同様のサービスと同様に、別のオプションです。