前言

在撰寫測試單元的時候,有時需要模擬將資料發送到外部網站的情況。為了實現這一點,需要自行編寫一個自定義的模擬(Mock),並在測試單元中將其實現。

• Need Callout Class Example

1
2
3
4
5
6
7
8
9
10
public class CalloutClass {
public static HttpResponse getInfoFromExternalService() {
HttpRequest req = new HttpRequest();
req.setEndpoint('https://example.com/example/test');
req.setMethod('GET');
Http h = new Http();
HttpResponse res = h.send(req); //打出Response
return res;
}
}

• 創建 Mock 並使用 HttpCalloutMock Interface 模擬 Response

MockForTestmethod.cls

1
2
3
4
5
6
7
8
9
10
11
global class YourHttpCalloutMockImpl implements HttpCalloutMock {
global HTTPResponse respond(HTTPRequest req) {
// Create a fake response.Set response values
HttpRequest req = new HttpRequest();
req.setEndpoint('https://example.com/example/test');
req.setMethod('GET');
Http h = new Http();
HttpResponse res = h.send(req);
return res;
}
}

• 在測試單元加上 Test.setMock

Test_blogExample.cls

1
Test.setMock(HttpCalloutMock.class, new YourHttpCalloutMockImpl());
1
2
3
4
5
6
7
8
9
10
11
12
@isTest
private class CalloutClassTest {
@isTest static void testCallout() {
// Set mock callout class
Test.setMock(HttpCalloutMock.class, new MockHttpResponseGenerator());

// This causes a fake response to be sent
// From the class that implements HttpCalloutMock.
HttpResponse res = CalloutClass.getInfoFromExternalService();
}
}

學習參考:Salesforce Apex Developer Guide