これは単純な問題ではなく、簡単な答えはありません。これらの指針が役立つことを願っています。
あなたの最善の戦略は、テストを本物の単体テスト (コンテナーなしで分離して実行できるもの) に分離し、コンテナーを必要とするテストを統合テストに移動することだと思います。
Ejb3unitを使用して、コンテナの実行を必要としないテストを最大化できます。複雑な依存関係のいくつかをモックするのに役立ちます。Ejb3unit には Maven プラグインがあります。Maven リポジトリへの接続の詳細については、ドキュメントを参照してください。
JMock などの他のモック フレームワークも役立ちます。ClassImposteriserを使用すると、クラスとインターフェイスをモックできます。
EJB コンテナーが必要なテストについては、これらを統合テストとして実行するように構成できます。EJB プロジェクト間の関係によっては、それらを別のプロジェクトに移動することが理にかなっている場合があります。
JUnit テストで組み込みの Jetty インスタンスを起動し、プログラムでサーブレットを追加することができます。もちろん、Jetty は EJB コンテナーではありません。 OpenEJBのような EJB コンテナーが必要です。
OpenEJB を Jetty に構成するには、次のような構成を使用します。
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<scanIntervalSeconds>5</scanIntervalSeconds>
<contextPath>/example</contextPath>
<systemProperties>
<systemProperty>
<name>java.naming.factory.initial</name>
<value>org.apache.openejb.client.LocalInitialContextFactory</value>
</systemProperty>
<systemProperty>
<name>java.naming.factory.url.pkgs</name>
<value>org.mortbay.naming</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
OpenEJB の依存関係宣言は次のようになります。
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-core</artifactId>
<version>3.1</version>
<scope>test</scope>
</dependency>
Seleniumを使用して機能テストを支援することもできます (ここまで到達したと仮定して) 。Selenium、Jetty、および OpenEJB を使用してこれを行うためのガイドを次に示します。