2012-02-27 8 views
2

私は私が上@Stateless EntityService@Stateless EntityDAOが含まれており、EJBプロジェクトを持っている7.EJBに対してJUnitテストを書くのに「正しい」方法は何ですか?

IBM RAD 7(別名のEclipse 3.4)およびWebSphereを使用しています。

私はこのJNDIのURLでEntityServiceを見上げJAX-RS RESTfulなWebサービスを含むWebプロジェクトがあります。

ejblocal:entityEAR/entityEJB.jar/[email protected] 

すべてが素晴らしい作品。

私の質問はEntityServiceEntityDAOクラスをテストするためのJUnit テストを記述するための「正しい」方法でしょう、何ですか?

WebLogicサーバーでシステムを動作させて機能させる必要があるため、私はアプリケーションを稼働させてから、JUnitテストを起動してWebサービスが使用しているものと同じJNDIを検索しますエラーが表示されます。

Naming Manager ... getURLContext cannot find the factory for this scheme: ejbLocal

任意の提案は、私はJUnitテストを書いてアプローチすべきか、便利ですか!

答えて

2

ユニットテストを書く場合は、JNDIルックアップを実行できないように、ユニットテストはコンテナに依存しないようにしてください(JVMでのみ実行されるため)。 EJB BeanとDAOをJUnitでテストするには、Mocking Framework(EasyMockなど)が大きな助けになります。

しかし、EJBとRESTサービスの間の通信をテストすることに興味がある場合は、統合テストが必要です。ここでJUnitがお手伝いできるかどうかは疑問です。統合テストの一般的なツールはSeleniumです。テストを実行するには、完全に機能するコンテナと環境が必要です。

1

一般に、JUnitは単体テストを書くことを意図しています。単体テストでは、単一の責任を持つ単一のコンポーネントの作業を検証します(少なくとも単一の責任を持つ必要があります)。) - すべての依存関係が何らかの形で嘲笑されます(easymock、mockitoなど)。 EJBで使用される依存性注入は、このプロセスを簡略化します。setUp()メソッドを使用してnewオペレータ(コンテナは必要ありません)でBeanをインスタンス化してから、擬似依存性を注入します(実際の依存性を注入するのと同じ方法)。 これは私が使用しているアプローチです。もう一つは、Webサービス(または他のリモートファサードメソッド)呼び出しからBeanロジック、DBクエリまでのシナリオ全体を検証する統合テストです。ただし、このような場合は、Webサービス/ファサードの後に​​立っているコンポーネントを確認しないでください。特定の入力に対するWebサービスの出力。

最初にテストを書き、最初に失敗してから、それを満たす実装を書いてください。単体テスト(単一のBean、テストはコンテナ内で実行されません)ではJUnitとEasyMock/Mockitoをお勧めします。統合テストでは、テスト用のシンプルなコンテナの形式としてSereniumまたはJUnit + OpenEJBを使用できます(特に、リモートファサードがEJBコンポーネントの形式である場合)。また、SoapUIのようなツールを使用すると、Webサービスのテストシナリオ全体を作成することができます。データを投稿し、取得し、変更し、配置し、取得し、削除するなどの処理を行います。

関連する問題