Skip to content

Templates

Define reusable record configurations for common test scenarios.

Template Interface

apex
public interface Template {
    SObject defaultTemplate();
    Map<String, SObject> templates();
}

useTemplate

Apply a named template to the record being built.

Signature

apex
Builder useTemplate(String templateName);

Traditional Apex

apex
Account enterprise = new Account(
    Name = 'Enterprise Account',
    Industry = 'Technology',
    AnnualRevenue = 1000000
);
insert enterprise;

Account startup = new Account(
    Name = 'Startup Account',
    Industry = 'Technology',
    AnnualRevenue = 100000
);
insert startup;

Test Lib

apex
Account enterprise = (Account) AccountTestModule.Builder()
    .enterprise()
    .buildAndInsert();

Account startup = (Account) AccountTestModule.Builder()
    .startup()
    .buildAndInsert();

Implementing Templates

Template Class

apex
public class Templates implements TestModule.Template {
    public SObject defaultTemplate() {
        return new Account(Name = 'Test Account', Industry = 'Technology');
    }

    public Map<String, SObject> templates() {
        return new Map<String, SObject>{
            'enterprise' => new Account(
                Name = 'Enterprise Account',
                Industry = 'Technology',
                AnnualRevenue = 1000000
            ),
            'startup' => new Account(
                Name = 'Startup Account',
                Industry = 'Technology',
                AnnualRevenue = 100000
            )
        };
    }
}

Builder with Templates

apex
public class AccountBuilder extends TestModule.RecordBuilder {
    public AccountBuilder() {
        super(new Templates());
    }

    public AccountBuilder enterprise() {
        super.useTemplate('enterprise');
        return this;
    }

    public AccountBuilder startup() {
        super.useTemplate('startup');
        return this;
    }
}

Template with Overrides

Templates can be combined with field overrides.

apex
Account acc = (Account) AccountTestModule.Builder()
    .enterprise()
    .withName('Custom Enterprise Name')
    .buildAndInsert();

// Name: 'Custom Enterprise Name'
// AnnualRevenue: 1000000 (from template)

TIP

Use templates for common business scenarios like enterprise, startup, closedWon, prospecting. This makes tests more readable and self-documenting.