function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion

Some clarifications needed on Test classes



I have been hounded by the following questions. I think I know answers to couple of them, but would like to confirm.


According to Testing Best Practices, we need to use System.assert methods to prove code behaves properly. Here is a scenario I need answers:

  • My trigger on a child object updates parent fields (kind of roll up, I can't use master-detail)
  • 1st I inserted Account (parent), then inserted Branches, says 5 (child)
  • The trigger runs on insert and updates 'No. of Branches' field of Account
  • Initially when I inserted Account, No. of Branches was 0. Now it should be 5
  • System.debug statements on trigger shows me that Account was updated successfully BUT when I use system.assertEquals(acc.No_of_Branches__c, 5) it fails
  • The System.debug(acc) shows me that the value is still 0, but when I query (as per - Test.startTest/Test.stopTest section) and see the field is updated

Why?? Do I need to do something extra? Is there any document which explains this behaviour?


To test the code for bulk records I use loops (for or while) and insert list of records. Is this the way? I understand that we can also use Test.loadData().

The version of the account in your test class won't be updated, the trigger gets a separate instance of the record. The only exception to this is the I'd is populated when you insert.

Thanks Champ. But why is this behavior? Why separate instance? Apologies if I am troubling on weekend, but these questions are hounding me!

I saw your twitter reply. Please let me know if you can find a doc. I will try to connect with Salesforce meanwhile.


I also noticed that while testing a controller, the initialization of VF page (which is paginated) doesn't call the variables that are used in apex output texts. Is it expected behaviour?

Also calling next() methods doesn't recreate/update the list thats shown in the pageBlockTable. But when I check in UI the next() action refreshes the table and next set of records are shown.


Ok got the answer., under Test Methods and Visualforce Controllers.


//Example of calling the 'setter' method for several properties. 
//Normally these setter methods are initiated by a user interacting with the Visualforce page, 
//but in a test method, just call the setter method directly. 

Realising the effects of keeping myself away from coding ;) A mistake that I will never repeat!

When you expect to test results on an object you have just inserted, always re-query it just after insert like this :

acc = [ SELECT Id, this__c, that__c FROM Account WHERE Id=];

You're sure to get correct test results.
Beware, however, of missing attributes in SOQL, if you have forgotten other__c for example :(