Skip to content

Instantly share code, notes, and snippets.

@madmax983
Last active September 23, 2021 09:54
Show Gist options
  • Save madmax983/d7ab48c744682985599640ac44dba63b to your computer and use it in GitHub Desktop.
Save madmax983/d7ab48c744682985599640ac44dba63b to your computer and use it in GitHub Desktop.
Apex Stub API with Static Methods
public with sharing class CMTService {
public List<CMTWrapper> getCMTs() {
List<CMTWrapper> cmtWrappers = new List<CMTWrapper>();
List<CMT__mdt> cmts = [SELECT Example_Field_1__c, Example_Field_2_c FROM CMT__mdt];
for(CMT__mdt c : cmts) {
CMTWrapper cmtWrapper = new CMTWrapper(c.Example_Field_1__c, c.Example_Field_2__c);
cmtWrappers.add(cmtWrapper);
}
return cmtWrappers;
}
public class CMTWrapper {
public String exampleField1;
public String exampleField2;
public CMTWrapper(String exampleField1, String exampleField2) {
this.exampleField1 = exampleField1;
this.exampleField2 = exampleField2;
}
}
}
public with sharing class ExampleController {
public static CMTService cmtService { get {
if(cmtService == null {
cmtService = new cmtService();
}
return cmtService;
} set {
cmtService = value;
}}
public ExampleController(ApexPage.StandardController ctrl) {
//Usual constructor setup stuff. Setting Ids, etc.
}
@RemoteAction
@AuraEnabled
public static Map<String, Object> doStuffThatNeedsCMTs() {
Map<String, Object> response = new Map<String, Object>();
List<CMTService.CMTWrapper> cmts = cmtService.getCMTs();
//Do stuff that needs CMTs
response.put('result', resultFromWorkWithCMTs);
return response;
}
}
@isTest
private class ExampleControllerTest {
static testmethod void testDoStuff {
List<CMTService.CMTWrapper> cmtWrappers = new List<CMTService.CMTWrapper>();
CMTService.CMTWrapper exampleCMT1 = new CMTService.CMTWrapper(
'Config1',
'Config2'
);
cmtWrappers.add(exampleCMT1);
CMTService.CMTWrapper exampleCMT2 = new CMTService.CMTWrapper(
'Config3',
'Config4'
);
cmtWrappers.add(exampleCMT2);
CMTServiceMock cmtMock = new CMTServiceMock(cmtWrappers);
CMTService mockService = (CMTService)Test.createStub(CMTService.class, cmtMock);
ExampleController.cmtService = mockService;
Test.startTest();
ExampleController.doStuffThatNeedsCMTs();
Test.stopTest();
//Asserts goes here
}
public class CMTServiceMock implements System.StubProvider {
public List<CMTService.CMTWrapper> cmtWrappers = new List<CMTService.CMTWrapper>();
public CMTServiceMock(List<CMTService.CMTWrapper> cmtWrappers) {
this.cmtWrappers = cmtWrappers;
}
public Object handleMethodCall(Object stubbedObject, String stubbedMethodName,
Type returnType, List<Type> listOfParamTypes, List<String> listOfParamNames,
List<Object> listOfArgs) {
if(stubbedMethodName == 'getCMTs') {
return cmtWrappers;
} else {
return null;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment