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

Web サービスコールアウトのテスト

生成されたコードは、Web サービスをコールするために呼び出せるメソッドが含まれる Apex クラスとして保存されます。この Apex クラスと付随するその他のコードをリリースまたはパッケージ化するには、生成されたクラス内のメソッドを含め、コードのテストカバー率が 75% に達している必要があります。デフォルトでは、テストメソッドは Web サービスコールアウトをサポートせず、Web サービスコールアウトを実行するテストは失敗します。テストの失敗を回避し、コードカバー率を高めるために、Apex には組み込みの WebServiceMock インターフェースと Test.setMock メソッドが用意されています。WebServiceMock および Test.setMock を使用して、テストメソッドで疑似応答を受信します。

Web サービスコールアウトをテストするための擬似応答の指定

WSDL から Apex クラスを作成した場合、自動生成されたクラスのメソッドが WebServiceCallout.invoke をコールし、そこから外部サービスへのコールアウトが実行されます。これらのメソッドをテストする場合、WebServiceCallout.invoke がコールされたときには常に疑似応答を生成するように Apex ランタイムに指示できます。そのためには、WebServiceMock インターフェースを実装し、送信する Apex ランタイムの擬似応答を指定します。手順の詳細は次のとおりです。

最初に、WebServiceMock インターフェースを実装し、doInvoke メソッドに擬似応答を指定します。

  • WebServiceMock インターフェースを実装するクラスは、global または public にできます。
  • このクラスはテストコンテキストでのみ使用されるため、@isTest のアノテーションを付加できます。この方法で、6 MB の組織コードサイズ制限からクラスを除外できます。

メモ

擬似応答の値を指定したら、テストメソッドで Test.setMock をコールし、この擬似応答を送信するように Apex ランタイムに指示できます。次のように、第 1 引数では WebServiceMock.class を渡し、第 2 引数では WebServiceMock のインターフェース実装の新しいインスタンスを渡します。

これ以降、Web サービスコールアウトをテストコンテキストで呼び出すと、コールアウトは行われません。doInvoke メソッド実装で指定した擬似応答を受信します。

コールアウトを実行するコードが管理パッケージに含まれる場合に疑似コール��ウトを行うには、同じパッケージ内のテストメソッドから同じ名前空間を使用して Test.setMock をコールします。

メモ

この例では、Web サービスコールアウトをテストする方法を示します。最初に挙げているのが、WebServiceMock インターフェースの実装です。この例では doInvoke メソッドを実装し、そのメソッドから指定した応答が返されます。この場合、自動生成されたクラスのレスポンス要素が作成されて値が割り当てられます。次に、応答の Map パラメータにこの擬似応答が入力されます。次の例は、「生成される WSDL2Apex コード」に記されている WSDL に基づいています。このクラスを保存する前に、この WSDL をインポートし、docSample というクラスを生成しておきます。

次のメソッドでは、Web サービスコールアウトを行います。

次のテストクラスには、擬似コールアウトモードを設定するテストメソッドが含まれます。これは前述のクラスに含まれる callEchoString メソッドをコールし、擬似応答が受信されたことを確認します。