この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

スタブ API を使用したモックフレームワークの作成

Apex には、モックフレームワークを実装するためのスタブ API があります。モックフレームワークには多くの利点があります。テストを合理化し、改善できるため、より迅速で信頼性の高いテストを作成するのに役立ちます。クラスを分離してテストするために使用できます。これは単体テストを行う場合に重要です。スタブ API を使用してモックフレームワークを作成すると、スタブオブジェクトが実行時に生成されるという利点もあります。これらのオブジェクトは動的に生成されるため、テストクラスをパッケージ化してリリースする必要がありません。独自のモックフレームワークを構築したり、他のユーザが構築したモックフレームワークを使用したりできます。

実行時に Apex クラスの匿名サブクラスとして作成されるスタブオブジェクトの動作を定義できます。スタブ API は System.StubProvider インターフェースと System.Test.createStub() メソッドから構成されます。

この機能は、上級 Apex 開発者向けです。使用するには、単体テストとモックフレームワークを完全に理解している必要があります。モックフレームワークは手に負えないと考えている場合は、先へと読み進む前にすこし準備が必要な場合があります。

メモ

スタブ API がどのように機能するかを示す例を見てみましょう。この例は、モックフレームワークの幅広い用途を示すものではありません。Apex スタブ API の使用上のしくみに焦点を絞るために、意図的に簡潔に記述されています。

次のクラスの書式設定メソッドをテストするとします。

通常、このメソッドを呼び出すときは、今日の日付を返すメソッドがあるヘルパークラスを渡します。

次のコードは、メソッドを呼び出します。

テストでは、getFormattedDate() メソッドを切り離して、書式設定が適切に機能していることを確認したいと考えています。getTodaysDate() メソッドの戻り値は通常、日によって異なります。ただし、この例では、テストを書式設定に限定する予測可能な定数値を返すようにします。ここでは、メソッドが定数値を返すクラスの「疑似」バージョンを記述するのではなく、クラスのスタブバージョンを作成します。実行時にスタブオブジェクトが動的に作成され、そのメソッドの「スタブ」動作を指定することができます。

Apex クラスのスタブバージョンを使用する手順は、次のとおりです。
  1. System.StubProvider インターフェースを実装してスタブクラスの動作を定義します。
  2. System.Test.createStub() メソッドを使用してスタブオブジェクトをインスタンス化します。
  3. テストクラス内からスタブオブジェクトの該当するメソッドを呼び出します。

StubProvider インターフェースの実装

以下は StubProvider インターフェースの実装です。

StubProvider はコールバックインターフェースで、実装を必要とする handleMethodCall() という 1 つのメソッドを指定します。スタブメソッドがコールされると、handleMethodCall() がコールされます。このメソッドのスタブクラスの動作を定義します。このメソッドには次のパラメータがあります。

  • stubbedObject: スタブオブジェクト
  • stubbedMethodName: 呼び出されるメソッドの名前
  • returnType: 呼び出されるメソッドの戻り値の型
  • listOfParamTypes: 呼び出されるメソッドのパラメータの型のリスト
  • listOfParamNames: 呼び出されるメソッドのパラメータ名のリスト
  • listOfArgs: 実行時にこのメソッドに渡される実際の引数値

これらのパラメータを使用して、クラスのどのメソッドがコールされたのかを判断し、続いて各メソッドの動作を定義できます。この場合は、メソッドの戻り値の型を特定して、ハードコードされた値を返します。

クラスのスタブバージョンのインスタンス化

次のステップは、クラスのスタブバージョンをインスタンス化することです。次のユーティリティクラスは、擬似オブジェクトとして使用できるスタブオブジェクトを返します。

このクラスには、Test.createStub() メソッドを呼び出す createMock() メソッドが含まれます。createStub() メソッドは、Apex クラス種別と、以前作成した StubProvider インターフェー���のインスタンスを取ります。そして、テストで使用できるスタブオブジェクトを返します。

スタブメソッドの呼び出し

最後に、テストクラス内からスタブクラスの該当するメソッドを呼び出します。

このテストでは、createMock() メソッドをコールして、DateHelper クラスのスタブバージョンを作成します。続いて、スタブオブジェクトで getTodaysDate() メソッドを呼び出すことができます。このメソッドはハードコードされた日付を返します。ハードコードされたこの日付を使用すれば、getFormattedDate() メソッドの動作を切り離してテストできます。

Apex スタブ API の制限事項

Apex スタブ API を操作するときは次の点に注意してください。

  • 模造されるオブジェクトは、Test.createStub() メソッドへのコールと同じ名前空間にある必要があります。ただし、StubProvider インターフェースの実装は別の名前空間でも構いません。
  • 次の Apex 要素は模造できません。
    • 静的メソッド (future メソッドを含む)
    • 非公開メソッド
    • プロパティ (getter および setter)
    • トリガ
    • 内部クラス
    • システム型
    • Batchable インターフェースを実装するクラス
    • 非公開コンストラクタのみを持つクラス
  • 戻り値の型またはパラメータの型としてイテレータは使用できません。