【Apex】Apex Test で外部コールアウトをテストする方法

  • Salesforce
  • Apex
  • ApexTest

Salesforce で開発する以上、Apex によるコーディングは避けて通れません。

そして、Apexで開発する場合は、Apex Test クラスの実装も同じく避けては通れません。

今回は、知ってるんだけど忘れがちな、外部コールアウトのテストクラスの実装を備忘録として紹介します。

コールアウトの Mock クラスの定義

早速ですが、コールアウトの Mock クラスのサンプルコードを以下に記載します。

HttpCalloutMock を実装する

ポイントは、 HttpCalloutMock インターフェースを実装することです。

これにより、テストクラスから呼び出した際に コールアウトの Mock として振舞うことができます。

公式 Developer Guide のリンクも併せてご参照ください。

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_interface_httpcalloutmock.htm

レスポンスをカスタマイズする

コールアウトのテストクラスでは、レスポンスを処理するコードが想定されます。

サンプルコードにあるように、HttpResponse にステータスコードやペイロードを定義してあげることでテストの幅が広がります。

ペイロードの定義は、Map 形式でレスポンスの各要素を設定し、JSON.serialize(o) でJSON形式にして Body 部に定義してあげるだけです。

Mock クラスを使った Apex Test の書き方

こちらもサンプルコードを記載します。

ポイントは、Test.setMock で先ほど定義した Mock クラスをセットするだけです。

あとは、Test.startTest(); と Test.stopTest(); の間でテスト対象のコードを呼び出してあげればテストできます。

おまけ:アンチパターンについて

Apex Test を記述する時は、原則 @isTest(SeeAllData=false) アノテーションをつけましょう。

SeeAllData は、テストで実際の環境に登録されているデータを参照可能にするか否かの設定です。

true にするのは、Salesforce Developer の試験にも頻出のアンチパターンです。

筆者
筆者

false を明示しておくほうが個人的に好きです。

おわりに

いざテストを書く段階になったら意外と忘れている書き方ですよね。

私自身も書く必要が出てきたらググってるので、備忘録として残しておきます。

少しでもこの記事がお役に立ちますように。

Sponsored