Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save SalesforceBobLightning/463d436ca3006c80d90b09ef3b92be0f to your computer and use it in GitHub Desktop.

Select an option

Save SalesforceBobLightning/463d436ca3006c80d90b09ef3b92be0f to your computer and use it in GitHub Desktop.
Using Multiple Callouts in a Single Unit Test
@isTest
public class TestClassWithMultipleCallouts {
@isTest
public static void testMethodMultipleCallouts(){
String contactResource = 'ContactsMock';
String invoiceResource = 'InvoicesMock';
StaticResourceCalloutMock contactMock = getStaticResourceCalloutMock(200, contactResource);
StaticResourceCalloutMock invoiceMock = getStaticResourceCalloutMock(200, invoiceResource);
Map<String, HttpCalloutMock> mocksMap = new Map<String, HttpCalloutMock>();
mocksMap.put('https://api.xero.com/api.xro/2.0/Contacts', contactMock);
mocksMap.put('https://api.xero.com/api.xro/2.0/Invoices', invoiceMock);
HttpCalloutMock mocks = new MultiRequestMock(mocksMap);
Test.setMock(HttpCalloutMock.class, mocks);
// act
Test.startTest();
// make call out
Test.stopTest();
// assert
}
private static StaticResourceCalloutMock getStaticResourceCalloutMock(Integer statusCode, String staticResourceName) {
StaticResourceCalloutMock mock = new StaticResourceCalloutMock();
mock.setStaticResource(staticResourceName);
mock.setStatusCode(statusCode);
mock.setHeader('Content-Type', 'application/json');
return mock;
}
public class MultiRequestMock implements HttpCalloutMock {
Map<String, HttpCalloutMock> requests;
public MultiRequestMock(Map<String, HttpCalloutMock> requests) {
this.requests = requests;
}
public HTTPResponse respond(HTTPRequest req) {
HttpCalloutMock mock = requests.get(req.getEndpoint());
if (mock != null) {
return mock.respond(req);
}
return null;
}
public void addRequestMock(String url, HttpCalloutMock mock) {
requests.put(url, mock);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment