コンテナ内のテストは、多くの場合、モックオブジェクトを使用したテストとは対照的です。ただし、モックオブジェクトは実際のオブジェクトの動作を模倣しているだけなので、コンテナ内のテストは、実際の環境でシステムを実際にテストする唯一の方法ではありませんか?
コンテナ内のテストとモックオブジェクトの部分的な代替手段として、SpringはTestContext
、実際のアプリケーションコンテナ(私の場合はWebアプリケーションサーバー)を起動することなく、Springを適切に初期化するフレームワークを提供します。ただし、これは、アプリケーションサーバー固有の機能がサポートされていないのに、Spring固有の機能のみを初期化するため、多少制限されたアプローチです。したがって、すべてをテストすることはできません。また、実際のWeb実行で使用されるデフォルトと100%同じWebApplicationContext
ではないので、このアプローチは少しハッキーではありませんか?悪いですか?
コンテナ内のテストには、少なくともCactus(時代遅れ)、Jeeunit(非常に小さなプロジェクト)、JBoss Arquillian(まだアルファ版ですが、有望に見えます)があります。これらのプロジェクトはあまり広く使われているとは思わないので、コンテナ内のテストに何か悪い点はありますか?コンテナ内テストでよく言及される主な欠点は、実行速度が遅いことです。ただし、継続的インテグレーション環境で比較的小規模なプロジェクトで実行する場合、これは問題にはなりません。
要約すると、コンテナ内またはコンテナ外のテストを行う必要があり、その理由は何ですか?統合テストにモックオブジェクトまたは代替の初期化メカニズム(Spring TestContextなど)を使用すると気分が悪くなりますか?
サブノート:私は最近、統合テストの分類について質問しました。これは関連する可能性があります。