Spring を使用して、組み込みデータベースをプログラムで作成および初期化できます。
@Before
public void setUp() {
database = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("schema.sql")
.addScript("init.sql")
.build();
....
}
またはSpring構成経由:
<jdbc:initialize-database data-source="dataSource">
<jdbc:script location="classpath:schema.sql"/>
<jdbc:script location="classpath:init.sql"/>
</jdbc:initialize-database>
ここで私のスクリプトはディレクトリschema.sql
にinit.sql
保存されていsrc/test/resources
ます。したがって、埋め込みデータベースを使用するテストが次のように実行される場合:
mvn test
その後、ファイルsrc/test/resources
が利用可能になり、すべて問題ありません。
しかし、代わりに組み込みデータベースを組み込み Web サーバー (Jetty または組み込み Tomcat) と共に統合テストで使用したいとします。
mvn integration-test
この後半のフェーズでは、組み込みデータベース内の特定のデータを想定して、Web サービスの特定の URL にアクセスすると、期待される HTTP 応答が返されるという、ほぼエンド ツー エンドのテストを行いたいと考えています。しかし、この時点で、組み込み Web サーバーにデプロイされた戦争にはファイルがないsrc/test/resources
ため、初期化スクリプトが存在せず、エラーが発生します。
原因: java.io.FileNotFoundException: クラスパスリソース [schema.sql] が存在しないため開けません
スクリプトを入れればすべてが機能しますが、これらのスクリプトはテスト用src/main/resources
に組み込みデータベースを埋めるためのものであり、war ファイルにはまったく属していません。デプロイされる実際のwarファイルを汚染することなく、組み込みデータベースを使用できるように統合テストをセットアップする方法を知っている人はいますか?
Spring の組み込みデータベースの初期化で、ファイル以外のものを使用できることを期待していました。私は JNDI について考えましたが、それには web.xml ファイルをテスト データのリソース定義で汚染する必要があるように思われます。それとも、貨物を使用するオプションがありますか? 私が知らないSpringのプログラムによるトリックはありますか?