概要
実際のApexCalloutが外部のエンドポイントに対してHTTP Requestを送信するのに対して、ApexCalloutのTestでは疑似的なエンドポイントをMock Classのインスタンス化によって作成し、そこに対してHTTP Requestを送信するというかたちを取ります。
以下、コードサンプルです。
コードサンプル
Calloutクラス
public calss TestCallout{
@future(callout=true)
public static String getReturnedString(String jsonS){
String returnedString;
Http http1 = new Http();
HttpRequest request1 = new HttpRequest();
request1.setEndpoint('エンドポイントURL');
request1.setMethod('POST');
request1.setHeader('Content-Type','application/json');
request1.setBody(jsonS);
HttpResponse response1 = http1.send(request1);
if (response1.getStatusCode() == 200 || response1.getStatusCode() == 201) {
System.debug('API linkage was successful: ' +
response1.getStatusCode() + ' ' + response1.getStatus()+ ' ' + response1.getBody());
Map<String, Object> result1 = (Map<String, Object>)JSON.deserializeUntyped(response1.getBody());
returnedString = (String)result1.get('returned_string');
} else {
System.debug('The status code returned was not expected: ' +
response1.getStatusCode() + ' ' + response1.getStatus()+ ' ' + response1.getBody());
}
return returnedString;
}
}
Mockクラス
@isTest
global class TestCalloutMock implements HttpCalloutMock {
global HTTPResponse respond(HTTPRequest request) {
HttpResponse response = new HttpResponse();
response.setHeader('Content-Type', 'application/json');
response.setBody('{"returned_string":"あいうえお"}');
response.setStatusCode(200);
return response;
}
}
Testクラス
@isTest
private class TestCalloutTest {
static testMethod void testPostCallout() {
Test.setMock(HttpCalloutMock.class, new TestCalloutMock());
String returnedStr = TestCallout.getReturnedString(jsonS);
}
}
※記事内容に関係ないので、jsonSの定義は省略しています。