Java プロジェクトでは、JUnit テストがセットアップ、テスト、破棄を行います。インメモリ データベースを使用して実際のデータベースをモック アウトする場合でも、通常は、トランザクションをロールバックするか、データベースをメモリから削除して、各テストの間に再作成します。これにより、1 つのテストが次のテストに影響を与える可能性のある環境にアーティファクトを残さないため、テストを分離できます。各テストは既知の状態で開始され、別の状態に移行することはありません。
これで、1100 個のテーブルと 400K のコード (多数の pl/sql パッケージ) を作成する Oracle db ビルドができました。データベースのインストールをテストするだけでなく(完全 - スクラッチから作成、部分 - 以前のデータベースからのアップグレードなど)、すべてのテーブルと他のオブジェクトがインストール後に期待どおりの状態であることを確認したいのですが、 pl/sqlでテストを実行します(前者を正確に行う方法がわかりません-提案?)。
これをすべてJenkins for CIから実行して、回帰テストで開発エラーをキャッチできるようにしたいと考えています。
まず、XE は Java SP をサポートしておらず、Oracle Web Flow に依存しているため、XE の代わりにエンタープライズ バージョンを使用する必要があります。これらの依存関係を排除したとしても、通常、ビルドは読み込みだけで 1.5 時間かかります (フル ビルド)。
では、この環境でテストの分離を実現するにはどうすればよいでしょうか。テストごとにトランザクションを使用してロールバックしますか? OK、コミットを含む pl/sql プロシージャはどうですか?
各テストの後にデータベースをリセットするか、各テストの間にデータベース全体を再作成するためのバックアップとリカバリについて考えました(抜本的すぎます)。どちらもインストールに 1 時間以上かかるため、実用的ではありません。テストごとにこれを行うのは、やり過ぎで正気ではありません。
データベーススキーマの砂に線を引き、その時点にロールバックする方法はありますか? 大きな「元に戻す」機能のようなものです。expdp/impdp または rman 以外の何か。おそらく、アプローチ全体がオフになっています。提案?他の人はこれをどのように行っていますか?
CI または小規模な本番アップグレード ウィンドウの場合、テスト スイート全体を妥当な時間 (30 分が理想的) で実行する必要があります。
この「元に戻す」機能を実現するのに役立つ製品はありますか?