SqlTester Class
Namespace
Usage
You provide mock column metadata and mock row data. The framework auto-generates the query submission and status responses from your mock data. Use setMockRows() to set a single page of results, or call enqueueMockRows() multiple times to simulate multi-page results. If you call cancel() in a test, any subsequent fetch against that query ID raises an exception in the mock layer, simulating production cancellation behavior.
Example
Set up a single-page mock and test an iterator:
1@IsTest
2static void testBasicQuery() {
3 sfsqlquery.SqlTester.clearMocks();
4
5 ConnectApi.QuerySqlMetadataItem col = new ConnectApi.QuerySqlMetadataItem();
6 col.name = 'Name__c';
7 col.type = ConnectApi.TypeEnum.VARCHAR;
8 sfsqlquery.SqlTester.setMockMetadata(new List<ConnectApi.QuerySqlMetadataItem>{ col });
9
10 ConnectApi.QuerySqlRow mockRow = new ConnectApi.QuerySqlRow();
11 mockRow.rowData = new List<Object>{ 'Acme' };
12 sfsqlquery.SqlTester.setMockRows(new List<ConnectApi.QuerySqlRow>{ mockRow });
13
14 sfsqlquery.SqlRowIterator iterator = sfsqlquery.SqlStatement.create('SELECT Name__c FROM accounts__dlm', 'default')
15 .execute();
16
17 Assert.isTrue(iterator.hasNext());
18 sfsqlquery.Row row = iterator.next();
19 Assert.areEqual('Acme', row.getString('Name__c'));
20}SqlTester Methods
The following are methods for SqlTester.
clearMocks()
Signature
public static void clearMocks()
Return Value
Type: void
Example
Clear mocks at the start of each test:
1@IsTest
2static void testMyQuery() {
3 sfsqlquery.SqlTester.clearMocks();
4 // Set up fresh mocks for this test
5 // ... test code ...
6}enqueueMockRows(rows)
Signature
public static void enqueueMockRows(List<ConnectApi.QuerySqlRow> rows)
Parameters
- rows
- Type: List<ConnectApi.QuerySqlRow>
- List of ConnectApi.QuerySqlRow objects representing one page of results.
Return Value
Type: void
Example
Simulate multi-page results for SqlQueueable:
1@IsTest
2static void testMultiPageQuery() {
3 sfsqlquery.SqlTester.clearMocks();
4
5 // Set up metadata
6 ConnectApi.QuerySqlMetadataItem col = new ConnectApi.QuerySqlMetadataItem();
7 col.name = 'Name__c';
8 col.type = ConnectApi.TypeEnum.VARCHAR;
9 sfsqlquery.SqlTester.setMockMetadata(new List<ConnectApi.QuerySqlMetadataItem>{ col });
10
11 // Page 1
12 ConnectApi.QuerySqlRow page1Row = new ConnectApi.QuerySqlRow();
13 page1Row.rowData = new List<Object>{ 'Page 1 Data' };
14 sfsqlquery.SqlTester.enqueueMockRows(new List<ConnectApi.QuerySqlRow>{ page1Row });
15
16 // Page 2
17 ConnectApi.QuerySqlRow page2Row = new ConnectApi.QuerySqlRow();
18 page2Row.rowData = new List<Object>{ 'Page 2 Data' };
19 sfsqlquery.SqlTester.enqueueMockRows(new List<ConnectApi.QuerySqlRow>{ page2Row });
20
21 // Execute queueable - will process both pages
22 Test.startTest();
23 System.enqueueJob(new MyQueryJob(
24 sfsqlquery.SqlStatement.create('SELECT Name__c FROM accounts__dlm', 'default')
25 ));
26 Test.stopTest();
27}isRunningTest()
Signature
public static Boolean isRunningTest()
setMockMetadata(metadata)
Signature
public static void setMockMetadata(List<ConnectApi.QuerySqlMetadataItem> metadata)
Parameters
- metadata
- Type: List<ConnectApi.QuerySqlMetadataItem>
- List of ConnectApi.QuerySqlMetadataItem objects that define the column names and types for the mocked query results.
Return Value
Type: void
Example
Define column metadata for mocked results:
1ConnectApi.QuerySqlMetadataItem idCol = new ConnectApi.QuerySqlMetadataItem();
2idCol.name = 'Id__c';
3idCol.type = ConnectApi.TypeEnum.VARCHAR;
4
5ConnectApi.QuerySqlMetadataItem amountCol = new ConnectApi.QuerySqlMetadataItem();
6amountCol.name = 'Amount__c';
7amountCol.type = ConnectApi.TypeEnum.DECIMAL;
8
9sfsqlquery.SqlTester.setMockMetadata(new List<ConnectApi.QuerySqlMetadataItem>{ idCol, amountCol });setMockRows(rows)
Signature
public static void setMockRows(List<ConnectApi.QuerySqlRow> rows)
Parameters
- rows
- Type: List<ConnectApi.QuerySqlRow>
- List of ConnectApi.QuerySqlRow objects representing the single page of results to return.
Return Value
Type: void
Example
Set a single page of mock results:
1ConnectApi.QuerySqlRow row1 = new ConnectApi.QuerySqlRow();
2row1.rowData = new List<Object>{ 'acc-001', 1000.00 };
3
4ConnectApi.QuerySqlRow row2 = new ConnectApi.QuerySqlRow();
5row2.rowData = new List<Object>{ 'acc-002', 2500.50 };
6
7sfsqlquery.SqlTester.setMockRows(new List<ConnectApi.QuerySqlRow>{ row1, row2 });