Last active
September 23, 2021 09:54
-
-
Save madmax983/d7ab48c744682985599640ac44dba63b to your computer and use it in GitHub Desktop.
Apex Stub API with Static Methods
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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