You can find below the list of best practices when we deal with test classes
- Make sure your code coverage is above 85%
Doing so make sure that every use case should be covered in different scenarios mentioned below
Single Action -To verify that the the single record produces the correct an expected result
Bulk action -Any apex record trigger ,class or extension must be invoked for 1-200 records
Positive behavior : Test every expected behavior occurs through every expected permutation , i,e user filled out every correctly data and not go past the limit
Negative Testcase :-Not to add future date , Not to specify negative amount
Restricted User :-Test whether a user with restricted access used in your code
- Test method should static and no void return type
- Stating with salesforce API 28.0 test method can not reside inside non test classes
- @Testvisible annotation to make visible private methods inside test classes.
- Test method can not be used to test web-service call out. Please use mock call out
- Data in User, profile, organization, AsyncApexjob, Corntrigger, RecordType, ApexClass, ApexComponent ,ApexPage objects can be accessed without (seeAllData=true) .
- Accessing static resource test records in test class e,g List
- Create TestFactory class with @isTest annotation to exclude from organization code size limit
- @testSetup to create test records once in a method and use in every test method in the test class
- Maximum number of test classes run per 24 hour of period is not greater of 500 or 10 multiplication of test classes of your organization
- As apex runs in system mode so the permission and record sharing are not taken into account . So we need to use system.runAs() to enforce record sharing
- System.runAs will not enforce user permission or field level permission as the running user
Please add your feedback as a comment so that I will take it into account.