Salesforce で外部システムと連携する際には、Apex の Http
クラスを使用して HTTP コールアウトを行います。しかし、テスト環境では実際の外部システムにリクエストを送信できません。そのため、HttpCalloutMock
インターフェースを実装することで、テスト時にモックレスポンスを返す仕組みを作成できます。
この記事では、HttpCalloutMock
を使用した HTTP コールアウトのテスト方法を解説します。
1. HttpCalloutMock インターフェースとは?
HttpCalloutMock
は、Apex における HTTP コールアウトをテストするためのインターフェースです。このインターフェースを実装することで、テスト環境で特定のレスポンスを返すように設定できます。
通常、Apex のテスト環境では実際の HTTP コールアウトが許可されていません。そのため、Test.setMock
メソッドを使用して、HttpCalloutMock
を適用し、あらかじめ決めたレスポンスを返すように設定する必要があります。
2. モッククラスの作成
まず、HTTP コールアウトを行うクラスを作成します。外部システムと通信するためのリクエストを構築し、HTTP レスポンスを取得する処理を含みます。
次に、HttpCalloutMock
インターフェースを実装するクラスを作成します。このクラスでは、リクエストに対するモックレスポンスを返す処理を実装します。これにより、テスト環境で外部システムに依存せずに HTTP コールアウトの動作を確認できます。
HTTP コールアウトを行うクラスのサンプル
public class MyHttpCallout {
public static String makeCallout() {
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://example.com/api');
request.setMethod('GET');
HttpResponse response = http.send(request);
return response.getBody();
}
}
モッククラスのサンプル
@isTest
public class MyHttpCalloutMock implements HttpCalloutMock {
public HTTPResponse respond(HTTPRequest req) {
HttpResponse response = new HttpResponse();
response.setStatusCode(200);
response.setBody('{\"message\": \"Success\"}');
return response;
}
}
3. モックを使ったテストの実装
テストクラスのサンプル
@isTest
public class MyHttpCalloutTest {
@isTest
static void testCallout() {
// モックを設定
Test.setMock(HttpCalloutMock.class, new MyHttpCalloutMock());
// テスト対象のメソッドを実行
String response = MyHttpCallout.makeCallout();
// 期待するレスポンスと比較
System.assertEquals('{\"message\": \"Success\"}', response);
}
}
テストクラスでは、Test.setMock
を使用してモッククラスを適用します。その後、実際に HTTP コールアウトを行うメソッドを呼び出し、期待するレスポンスと比較することで、正しく動作するかを検証します。
4. まとめ
-
HttpCalloutMock
インターフェースを実装することで、テスト環境でも HTTP コールアウトの動作を確認できます。 -
Test.setMock(HttpCalloutMock.class, モッククラスのインスタンス)
を使用して、HTTP コールアウトのレスポンスを制御します。 - モックを活用することで、外部サービスに依存せずに Apex のテストを実行できます。
この記事が少しでも参考になれば幸いです!
参考