統合テスト用のトリガーを持つメモリデータベースでJDBC準拠を初期化しますか?
-
02-01-2020 - |
質問
現在、私たちの統合テストすべてのデータベースインスタンスを1つ持っています。 Oracle DatabaseスキーマはDDLの束によって同期されています。その後、DBUnitを使用してテスト間のテーブルを入力して切り捨てます。このアプローチには2つの問題があります:
- データベースの準備に費やされた時間は、除用されたテスト 以上の時間以上です。
- 時には、通常テストの失敗、テストデータは後続のテストに出血し、より多くの失敗を引き起こします。
- 既存のOracleスキーマからIn-Memoryデータベース(H2または任意のもの)を作成でき、トリガーは含まれていますか?
- または、私のEntityManager(DDL生成)を使用してメモリ内データベースを作成し、その場でのトリガーの束を作成することができますが、テスト実行の前には?
- 春:3.2.8
- スプリングデータJPA:1.5.3
- Eclipseリンク:2.5.1
- Oracle:11
テストごとにメモリ内データベース(H2など)を作成することでテストを分離したい。私はDDLを生成するためにEclipSeLinkを設定することを計画しています(Oracle DDLを他の何かに変換するのは悪夢になるだろうと思います)。その時点での唯一の問題はトリガーを作成することです。
だから私は2つの質問をしています...
技術スタック:
スプリングテスト統合環境をインスタンス化してメモリ内データベースをロードする方法に精通しています。私がOracleのものを翻訳できる方法がわからない(具体的にはトリガー、)。
解決
既存のOracleスキーマからインメモリデータベース(H2またはOrys)を作成でき、トリガーは含まれていますか?
はい、これを持つことができます。インメモリデータベースのすべての物理データベースとHSQLのすべてのPostgresを使用します。 Hibernateを使用してエンティティクラスからデータベースを生成することで開始しましたが、今やFlywayを使用するように移行しました。 DMLとDDLの一部がOracleにカスタムになるため、HSQLまたはH2(Flywayを使用してやるのはかなり簡単)にカスタマイズする必要があることに注意してください。
または、私のEntityManager(DDL生成)を使用してメモリ内データベースを作成し、その場でトリガーの束を作成することができますが、テスト実行の前には?
インメモリデータベースを清掃/操作することができます。複数の方法があります:
- Flyway Test Extensions - これは簡単に、使用するものです。 https://github.com/flyway/flyway-test-extensions
- テストプロファイル@profile( "test")を持つスプリングBeanを書き込み、テスト環境のデータを挿入します。
- import.sqlスクリプトを使用してください。私は春のテストハーネスがこれを探すことを見ると思います。