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

Newer Version Available

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

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}