Mocking
Mock DML operations in unit tests to avoid actual database changes while still verifying your code's behavior.
How It Works
- Add an identifier to your DML operation in the production code
- Register a mock for that identifier in your test
- Execute the code - DML operations are intercepted, no database changes occur
- Verify results using
DML.retrieveResultFor()
Quick Example
Class
apex
public class AccountService {
public void createAccount() {
new DML()
.toInsert(new Account(Name = 'Acme'))
.identifier('AccountService.createAccount')
.commitWork();
}
}Test
apex
@IsTest
static void shouldCreateAccount() {
// 1. Register mock
DML.mock('AccountService.createAccount').allInserts();
// 2. Execute
Test.startTest();
new AccountService().createAccount();
Test.stopTest();
// 3. Verify - no records in database, but results captured
DML.Result result = DML.retrieveResultFor('AccountService.createAccount');
Assert.areEqual(1, result.insertsOf(Account.SObjectType).successes().size());
}Key Benefits
- Fast tests - No database operations means faster execution
- IDs assigned - Records receive valid mock IDs for relationship testing
- Selective mocking - Mock specific SObject types while allowing others to execute
- Exception simulation - Test error handling without real failures
Available Methods
apex
// Mock all operations
Mockable allDmls();
// Mock by operation type
Mockable allInserts();
Mockable allUpdates();
Mockable allUpserts();
Mockable allDeletes();
Mockable allUndeletes();
Mockable allMerges();
Mockable allPublishes();
// Mock by SObject type
Mockable insertsFor(SObjectType objectType);
Mockable updatesFor(SObjectType objectType);
Mockable upsertsFor(SObjectType objectType);
Mockable deletesFor(SObjectType objectType);
Mockable undeletesFor(SObjectType objectType);
Mockable mergesFor(SObjectType objectType);
Mockable publishesFor(SObjectType objectType);
// Simulate exceptions
Mockable exceptionOnInserts();
Mockable exceptionOnUpdates();
Mockable exceptionOnUpserts();
Mockable exceptionOnDeletes();
Mockable exceptionOnUndeletes();
Mockable exceptionOnMerges();
Mockable exceptionOnPublishes();
// Simulate exceptions for specific SObject type
Mockable exceptionOnInsertsFor(SObjectType objectType);
Mockable exceptionOnUpdatesFor(SObjectType objectType);
Mockable exceptionOnUpsertsFor(SObjectType objectType);
Mockable exceptionOnDeletesFor(SObjectType objectType);
Mockable exceptionOnUndeletesFor(SObjectType objectType);
Mockable exceptionOnMergesFor(SObjectType objectType);
Mockable exceptionOnPublishesFor(SObjectType objectType);