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

HttpCalloutMock インターフェースの実装による HTTP コールアウトのテスト

HttpCalloutMock インターフェースを実装して respond メソッドで送信される応答を指定できるようにします。Apex ランタイムでこのメソッドをコールしてコールアウトへの応答を送信します。

1global class YourHttpCalloutMockImpl implements HttpCalloutMock {
2    global HTTPResponse respond(HTTPRequest req) {
3        // Create a fake response.
4        // Set response values, and 
5        // return response.
6    }
7}
  • HttpCalloutMock インターフェースを実装するクラスには、global と public のいずれかを使用できます。
  • このクラスはテストコンテキストでのみ使用されるため、@isTest のアノテーションを付加できます。この方法で、6 MB の組織コードサイズ制限からクラスを除外できます。

メモ

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

1Test.setMock(HttpCalloutMock.class, new YourHttpCalloutMockImpl());

これ以降で HTTP コールアウトがテストコンテキストで呼び出された場合、コールアウトは実行されず、respond メソッド実装で指定した擬似応答が受信されます。

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

メモ

次の詳細な例は、HTTP コールアウトのテスト方法を示しています。インターフェースの実装 (MockHttpResponseGenerator) が最初に記述されています。その後に、テストメソッドを含むクラスと、テストでコールするメソッドを含む別のクラスが続きます。testCallout テストメソッドは、getInfoFromExternalService をコールする前に Test.setMock をコールすることで擬似コールアウトモードを設定します。次に、返された応答が、実装された respond メソッドで送信した内容と同じであることを確認します。各クラスを個別に保存して、CalloutClassTest でテストを実行します。

1@isTest
2global class MockHttpResponseGenerator implements HttpCalloutMock {
3    // Implement this interface method
4    global HTTPResponse respond(HTTPRequest req) {
5        // Optionally, only send a mock response for a specific endpoint
6        // and method.
7        System.assertEquals('http://example.com/example/test', req.getEndpoint());
8        System.assertEquals('GET', req.getMethod());
9        
10        // Create a fake response
11        HttpResponse res = new HttpResponse();
12        res.setHeader('Content-Type', 'application/json');
13        res.setBody('{"example":"test"}');
14        res.setStatusCode(200);
15        return res;
16    }
17}
1public class CalloutClass {
2    public static HttpResponse getInfoFromExternalService() {
3        HttpRequest req = new HttpRequest();
4        req.setEndpoint('http://example.com/example/test');
5        req.setMethod('GET');
6        Http h = new Http();
7        HttpResponse res = h.send(req);
8        return res;
9    }
10}
1@isTest
2private class CalloutClassTest {
3     @isTest static void testCallout() {
4        // Set mock callout class 
5        Test.setMock(HttpCalloutMock.class, new MockHttpResponseGenerator());
6        
7        // Call method to test.
8        // This causes a fake response to be sent
9        // from the class that implements HttpCalloutMock. 
10        HttpResponse res = CalloutClass.getInfoFromExternalService();
11        
12        // Verify response received contains fake values
13        String contentType = res.getHeader('Content-Type');
14        System.assert(contentType == 'application/json');
15        String actualValue = res.getBody();
16        String expectedValue = '{"example":"test"}';
17        System.assertEquals(actualValue, expectedValue);
18        System.assertEquals(200, res.getStatusCode());
19    }
20}