0

J2EE Web アプリケーションでは、Web コンテキストと単体/統合テストの両方からリソースが見えるように、リソースをどのように管理しますか?

多くの場合、開発中にソース/リソース フォルダーを特定の方法 (つまり、Maven が期待するもの) に構成することになり、単体テストは IDE で実行されます。ただし、Web アプリがビルドされて WAR ファイルにパッケージ化されると (つまり、継続的インテグレーション サーバーがビルドを実行すると)、リソースが別の場所にあるため、単体テストは実行されなくなります。

リソースを 2 つの異なる場所に保持し、それらを手動で同期することになりますか?

4

3 に答える 3

2

コンテナーで単体テストを使用しようとしましたが、数年前にあきらめました。他のクラスへの依存関係をモックアウトして、各単体テストが単一のクラスのみをカバーするようにする方が (少なくとも私たちにとっては) はるかに優れています ( JMockまたはその多くの競合他社を参照してください)。データベース、ネットワーク、またはファイルシステムに触れる場合、それは単体テストではありません。(これは他の何かに役立つかもしれませんが、単体テストではありません。詳細については、これらの単体テスト規則を参照してください。)

このように記述された単体テストはどこでも実行でき、非常に高速です (数千ものテストがあり、中程度のスペックのハードウェアで 60 秒未満で実行できます)。

サブシステムまたはアプリケーション全体をチェックする統合テストを実行することもできます。サブシステムのテストでも境界でモックを使用できることがわかりました。たとえば、外部の価格設定フィードを偽造します。また、エンド ツー エンドのテストは、アプリケーション全体をサーバーにデプロイできるSeleniumWebDriverなどのツールで最適に機能することがわかりました。そして、ユーザーと同じようにブラウザーでヒットします。

(ちなみに、私たちの単体テストの方法は、Martin Fowler の分類法において、私たちを古典主義者ではなく、模倣者にしてしまいます。)

于 2009-01-15T22:34:52.987 に答える
1

通常、これがマルチモジュールビルドの理由です。外部サービスは、Webアプリケーションとは別のビルドユニットにあります。したがって、そのモジュールをビルドするときに、統合テストをビルド、パッケージ化、および実行します。

別のモジュールには、ドメインモデルとその単体テストを含めることができます。これらの単体テストもビルド時に実行されます。

WARを生成するモジュールには、Javaコードがまったく含まれておらず、Web関連のアーティファクトのみが含まれているのは非常に一般的です。必須ではありませんが、warモジュールにあるコードを別のモジュールに含めることができないため、これが行われることがよくあります。

最後の特殊なケースは、Webテストを含むモジュールです。このモジュールは、他のモジュールからのテストスコープのアーティファクトを必要とすることがよくあります(アプリケーションを外部からテストしているためですが、内部からのデータが必要な場合があります)。これは、テストリソースをjarファイルにパッケージ化し、モジュールごとに個別の「テスト」jarファイルのセットを作成することで解決できます。

マルチモジュールビルドはMavenプロジェクトの標準であり、antなどの他のビルドシステムでも簡単にセットアップできます。

于 2009-01-15T20:48:39.737 に答える
0

テスト リソースやテストを WAR ファイルにパッケージ化したり、WAR から単体テストを実行したりしません。なぜそうしようとしているのですか?

于 2009-01-15T20:22:27.620 に答える