From 07fca6cd8517a34bbbe0c996cfd316f851c3984d Mon Sep 17 00:00:00 2001 From: Reinier van den Assum Date: Mon, 5 Jun 2023 17:28:16 +0200 Subject: [PATCH] 2023-06-05: fflib_Application.cls: Extending Selector and Domain Factories with setMock() method which doesn't require .sObjectType() to be mocked * Feature to allow simplifying how a Selector and/or Domain are being stubbed * To prevent forgetting to mocks.when() the method .sObjectType(), causing unexpected and undesired test method results (especially for juniors) * Additionally, this aligns nicely with setMock() for Services where the Interface method is provided * New approach is 100% backward compatible with a little hint for developers as reminder to mock the sObjectType()-method * Original code to mock a Domain class: mocks.startStubbing(); mocks.when( m_domLeads.sObjectType() ).thenReturn( Lead.SObjectType ); mocks.stopStubbing(); fflib.domain.setMock( m_domLeads ); * New code: fflib.domain.setMock( Lead.SObjectType, m_domLeads ); --- .../main/classes/fflib_Application.cls | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/sfdx-source/apex-common/main/classes/fflib_Application.cls b/sfdx-source/apex-common/main/classes/fflib_Application.cls index 889c8163320..b61904c288f 100644 --- a/sfdx-source/apex-common/main/classes/fflib_Application.cls +++ b/sfdx-source/apex-common/main/classes/fflib_Application.cls @@ -273,8 +273,15 @@ public virtual class fflib_Application @TestVisible protected virtual void setMock(fflib_ISObjectSelector selectorInstance) { - m_sObjectByMockSelector.put(selectorInstance.sObjectType(), selectorInstance); - } + System.debug(System.LoggingLevel.INFO, '*** fflib - Please note your mocked class should have sObjectType() stubbed, or use setMock( SObjectType, SelectorMock )'); + setMock(selectorInstance.sObjectType(), selectorInstance); + } + + @TestVisible + protected virtual void setMock(SObjectType sType, fflib_ISObjectSelector selectorInstance) + { + m_sObjectByMockSelector.put(sType, selectorInstance); + } } /** @@ -415,7 +422,14 @@ public virtual class fflib_Application @TestVisible protected virtual void setMock(fflib_ISObjectDomain mockDomain) { - mockDomainByObject.put((Object) mockDomain.sObjectType(), (fflib_IDomain) mockDomain); + System.debug(System.LoggingLevel.INFO, '*** fflib - Please note your mocked class should have sObjectType() stubbed, or use setMock( SObjectType, SelectorMock )'); + setMock(mockDomain.sObjectType(), mockDomain); + } + + @TestVisible + protected virtual void setMock(SObjectType sType, fflib_ISObjectDomain mockDomain) + { + mockDomainByObject.put((Object)sType, (fflib_IDomain)mockDomain); } @TestVisible