EJB テスト・パターンを EJB テスト・プロセスで使用すると便利です。 これらのテスト・パターンには、EJB ライフ・サイクル・テスト・パターン、EJB ビジネス・ロジック・テスト・パターン、および EJB セッション・ファサード・テスト・パターンが含まれます。
自動化コンポーネント・テスト機能を使用すると、EJB をリモート・インターフェース (リモートおよびホーム) を介してリモートからテストすること、あるいはローカル・インターフェース (ローカルおよびローカル・ホーム) を介してローカルにテストすることができます。 ローカルにテストする場合は、テスト対象の EJB と同じアプリケーション・サーバーにテストをデプロイします。
EJB ライフ・サイクル・テスト・パターンは、EJB のライフ・サイクル・メソッド (Bean の新規作成用、Bean の除去用、および Bean の検索用) をテストするためのテストの作成に使用します。 ローカル・ホームまたはホーム・インターフェース内で公開されているそれぞれのライフ・サイクル・メソッドごとに、対応するコールバック・メソッドが EJB の Bean クラス内に存在し、それらのコールバック・メソッドの実装はこの Bean クラスで定義されています。 例えば、ホーム・インターフェース内の create メソッドについては、そのそれぞれと対応する ejbCreate メソッドが Bean クラス内に存在します。
ライフ・サイクル・パターンは、コールバックを失敗させる可能性のある数種類のシナリオをシミュレートしてコールバック・メソッドをテストするのに役立ちます。 このテスト・パターンは、ステートフル・セッション Bean とエンティティー Bean の場合には、Bean の状態が正しいかどうかも検査します。 その一例として、Bean クラスのフィールドの値をテストすることが挙げられます。 これらの値をテストするには、分かりやすいデータをテスト・データ・テーブルに提供してください。
ライフ・サイクル・パターンから、予期されるシナリオ用のテスト・コードが Bean のタイプごとに自動的に生成されるので、EJB をテストする作業が単純化されます。
ライフ・サイクル・テスト・パターンを使用してステートレス・セッション Bean をテストする場合は、EJB の Bean クラスで実装されている ejbCreate() および ejbRemove() コールバック・メソッドをテストするためのコードが生成されます。 テスト対象となるのは以下のコールバック・メソッドです。
以下のテスト・シナリオが含められます。
ライフ・サイクル・テスト・パターンを使用してステートフル・セッション Bean をテストする場合は、ejbCreate() および ejbRemove() のテスト用に生成されるコードに加えて、Bean の状態をテストするためのコードも生成されます。テスト対象となるのは以下のコールバック・メソッドです。
以下のテスト・シナリオが含められます。
ライフ・サイクル・テスト・パターンを使用してエンティティー Bean をテストする場合は、パーシスタンスとデータベース・ルックアップをテストするための追加のコードも生成されなければなりません。 テスト対象となるのは以下のコールバック・メソッドです。
以下のテスト・シナリオが含められます。
EJB ビジネス・ロジック・テスト・パターンは、ビジネス・ロジックのテストに使用します。 ビジネス・ロジックは、通常はセッション Bean に実装されます。ただし、エンティティー Bean にビジネス・ロジックが含まれている場合もあります。 必ず、ビジネス・ロジック自体 (つまり、パラメーター内のデータを処理するアルゴリズム) をテストし、テスト・データ・テーブルを使用してデータ駆動型のテストを広い範囲の入力データに対して行ってください。
EJB セッション・ファサード・テスト・パターンは、セッション・ファサード・デザイン・パターンの実装をテストするのに使用します。 このデザイン・パターンは、高水準のビジネス・ロジック・インターフェースを提供して、アプリケーションの複雑さをクライアントから隠し、パフォーマンスを向上させることを目的として使用されます。 セッション・ファサード・デザイン・パターンは、既知の J2SE ファサード・パターンの EJB バージョンです。 テスト・セッション・ファサード・パターンの一般的なユース・ケースとしては、ローカル・エンティティー Bean を呼び出すセッション Bean のテストが挙げられます。 セッション・ファサード・パターンは、通常は一連のエンティティー Bean (サブシステム) をセッション Bean のレイヤー (セッション・ファサード) の中にラップします。同様に、セッション・ファサード・テスト・パターンは、ファサードの背後にあるサブシステム用のテストを生成します。 テスト・ウィザードのページでは、EJB (通常はセッション Bean) とそのビジネス・インターフェース内の一連のメソッドを選択できます。
例えば、以下の 3 つの EJB から構成されるサブシステムの場合を考えてみましょう。
以下のコードに示されているように、TransferFunds EJB には transferFunds メソッドが含まれています。
public void transferFunds(String accountId1, String accountId2, int amount){ BankAccountHome bankAccountHome=getHome("",...); BankAccount bankAccount=bankAccountHome.findByPrimaryKey(accountId1); CardAccountHome cardAccountHome=getHome("",...); CardAccount cardAccount=cardAccountHome.findByPrimaryKey(accountId2); bankAccount.withDraw(amount); cardAccount.deposit(amount); }
transferFunds メソッドを調べると、このメソッドが以下のことを行うことに気付きます。
このケースでは、TransferFunds EJB がファサードで、テスト対象のサブシステムは BankAccount EJB と CardAccount EJB から構成されています。 自動化コンポーネント・テスト (Automated Component Testing) を使用して、サブシステム内のメソッド (つまり、findByPrimaryKey、findByPrimaryKey、withDraw、および deposit) 用のテストを生成できます。