1. ホーム
  2. postgresql

[解決済み] Java JUnitテストのためのPostgreSQLの組み込み

2022-02-16 16:55:59

質問内容

PostgreSql駆動のアプリケーションをユニットテストするために、PostgreSqlを埋め込むことはできますか?

PostgreSqlにはいくつかの方言があるので、他の組み込みデータベースよりも組み込みPostgreSqlそのものを使ったほうがよいでしょう。

組み込み型といっても、必ずしもJVMのプロセスに組み込まなければならないわけではありません。また、必ずしもインメモリ永続化を使用する必要はありません。依存関係管理(Maven, Gradle)によって自動的にロードされ、ローカルにPostgreSQLサーバをインストールし設定しなくても、すべてのマシンでユニットテストが実行できるようにする必要があります。

解決するには?

プロセス中にロード可能なデータベースという意味で、PostgreSQLを組み込んだものは存在しません。PostgreSQLはプロセス指向で、各バックエンドは1つのスレッドを持ち、複数のプロセスを生成して作業を行います。これはライブラリとしては意味をなしません。

H2データベース サポート PostgreSQL SQL方言の限定されたサブセット と PgJDBC ドライバを使用することです。

何をするのか できること するのは initdb 新しい一時的なデータベース で起動します。 pg_ctl を他のインスタンスと衝突しないようにランダムなポートで実行し、テストを実行し、それから pg_ctl で停止させ、最後に一時的なデータベースを削除します。

I を強くお勧めします。 を実行することで、一時的なpostgres デフォルト以外のポートで そのため、テストを実行するマシンにローカルにインストールされた PostgreSQL と衝突する危険はありません。

(そこで の意味での埋め込みPostgreSQLです。 ecpg は、本質的にPostgreSQLの クライアント C言語で埋め込まれた ソースコード をプリプロセッサーベースのC言語拡張として使用することができます。それでもサーバーが必要で、ちょっと使いにくいので、あまりお勧めできません。これは主に、他の様々なデータベースからの移植を容易にするために存在しています)。