2009-07-27 17 views
7

私たちはEAR &のEJBプロジェクトをmavenでビルドしています。すべてのEJBプロジェクトをビルドし、EARの依存関係として使用されるため、最終的にEARファイルにパックされます。Maven EARモジュールとEJB依存関係のテスト

問題は、各EJBプロジェクトにEJBをチェックするjunitテストがあることです。今のところ、これらのテストはアプリケーションサーバー(jboss)に接続してEJBインターフェイスからメソッドを実行しようとするため、あまり有用ではありません。

EJBをビルドしてEARをビルドして展開し、すべてのEJBからすべてのテストをアプリケーションサーバーに対して実行する方法はありますか?

今のところ、初心者のEJB実装クラスによるテストでAPをシミュレートしていて、手作業で "注入"するもの(someEJBImpl.em = EntityManager ....)は非常に厄介です。私は自分でトランザクションを処理する必要があります。

実際のAPに対してEJBテストを実行する他の方法はありますか?すでに構築されたEJBモジュールのサブセットを持つ各EJBモジュールの後にEARをデプロイできますか?しかしどうですか?

EARテストの一環としてすべてのEJBモジュールのmavenテストを実行するように設定できますか?これを行う方法 ?

答えて

7

これは簡単な問題ではなく、簡単な答えはありません。うまくいけば、これらのポインタが役に立ちます。

あなたのベストプラクティスは、テストを本物の単体テストに分離することです。つまり、コンテナなしで単独で実行でき、コンテナを必要とするテストを統合テストに移行することです。

Ejb3unitを使用すると、コンテナの動作を必要としないテストを最大限に活用できます。それは、複雑な依存関係のいくつかを模擬するのに役立ちます。 Ejb3unitにはMavenプラグインがあります。詳しくはdocumentationを参照してください。

JMockなどの他のモッキングフレームワークも役立ちます。 ClassImposteriserを使用している場合は、クラスだけでなくインターフェイスをモックできます。

EJBコンテナが必要なテストの場合は、integration testsとして実行するように設定することができます。EJBプロジェクト間の関係に応じて、別のプロジェクトに移動することが理にかなっています。

embedded Jetty instance in your JUnit testsを起動し、サーブレットをプログラムで追加することは可能です。もちろん、JettyはEJBコンテナではありません。OpenEJBのようなEJBコンテナが必要です。 (

<dependency> 
    <groupId>org.apache.openejb</groupId> 
    <artifactId>openejb-core</artifactId> 
    <version>3.1</version> 
    <scope>test</scope> 
</dependency> 

あなたはまた、機能テストを支援するためにSeleniumを使用することができます。OpenEJBのため

<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を構成するにはあなたがこれを持っていれば)、ここには guide using Selenium, Jetty and OpenEJBがあります。

関連する問題