Salesforce Certified Platform Developer II — Question 10
@isTest
static void testIncrement() {
Account acct = new Account(Name = 'Test');
acct.Number_Of_Times_Viewed__c = 0;
insert acct;
AuditUtil.incrementViewed(acct.Id);
Account acctAfter = [SELECT Number_Of_Times_Viewed__c FROM Account WHERE Id = :acct.Id][0]
System.assertEquals(1, acctAfter.Number_Of_Times_Viewed__c);
}
The test method above calls an @future method that increments the Number_of_Times_Viewed__c value. The assertion is failing because the
Number_of_Times_Viewed__c equals 0.
What is the optimal way to fix this?
Answer options
- A. Change the initialization to acct.Number_Of_Times_Viewed__c = 1.
- B. Add Test.startTest() before and Test.stopTest() after AuditUtil.incrementViewed.
- C. Add Test.startTest() before and Test.stopTest() after insert acct.
- D. Change the assertion to System.assertEquals(0, acctAfter.Number_Of_Times_Viewed__c).
Correct answer: B
Explanation
The correct answer is B because @future methods are processed asynchronously, and using Test.startTest() and Test.stopTest() ensures that the future method execution is completed before the assertion is made. Option A does not address the asynchronous nature of the method, option C is not relevant to when the future method is executed, and option D contradicts the expected behavior of incrementing the count.