本番環境とテスト ランタイムに二重のpersistence.xmlファイルを使用していますが、これはクラスパスに関連する問題にすぎません (Eclipse を使用していますが、WTP プラグインにはあまり依存していません)。2 つの唯一の違いは、実稼働バージョンにはエンティティ定義が含まれていないことです。
JPA のテストにモッキング フレームワークは使用していません。テストでは、PostgreSQL データベースと通信する JPA を使用して実際のデータ アクセスを実行します。
テストに対する私たちのアプローチは、永続層の Spring テスト フレームワークであるイントランザクション テストに基づいています。私たちのアプリケーションは Spring ベースですが、このアプローチは、Spring テスト クラスを利用したい任意のアプリケーションにも同様に使用できます。本質は、各テストがコミットされない単一のトランザクション内で実行され、最後に (tearDown で) 自動的にロールバックされることです。これにより、データ汚染とテストの依存性の問題が、控えめで透過的な方法で解決されます。
Spring テスト フレームワークは柔軟で、マルチトランザクション テストを可能にしますが、これらはテストの 10% 以下を構成する特殊なケースです。
私たちはまだJUnit 3.8 のレガシー サポートを使用していますが、JUnit 4 用の新しいSpring TestContext フレームワークは非常に魅力的です。
イントランザクション テスト データを設定するために、ビジネス エンティティを構築する社内ユーティリティ クラスを使用します。すべてのテスト間で共有されるため、維持およびサポートするためのオーバーヘッドは、テスト データをセットアップするための標準的で信頼性の高い方法を持つという利点によって大幅に上回ります。
Spring DI は、テストを簡潔で自己記述的にするのに役立ちますが、重要な機能ではありません。