[#Blogged] Apex Test Class Best Practices

You have to cover at least 75% but getting 100% must be the prime focus.
Never code to get the percentage cover.

  • All test methods should reside in a separate class from the class in which the method being tested resides.
  • These classes should be appended with the word Test followed by the name of the class being tested, e.g. OpportunityServicesTest.Some people use Test in front which is confusing and would consume more time while deploying/packaging.
  • These classes should all use the @isTest annotation.
  • Each method in the production class should have, at a minimum, one corresponding test method in its test class and should be appended by “test.”
  • There should be a minimum of “Null Pointer Exception test” as part of negative testing for each method, especially the methods that accept parameters.
  • A method without an assert statement is not considered a test method. A large number of relevant assert statements increases confidence in the correct behaviour of business logic.
  • There should be a comment with each assert statement explaining what is being tested and what the expected output is
  • Only use isTest(SeeAllData = true) on class methods in exceptional cases where there are sobjects that don't allow DML operation e.g. PriceBook creation.
  • System.runAs will not enforce user permission or field level permission.
  • All test data creation should be done from a Utility class. This allows for a streamlined creation of test objects that adhere to all the validation rules.
Resources :