Spring 15 Test Setup Method Usage and Limitation

Spring’15 release came up with @testSetup method. This is one of the good features in this release for Test Class. Let’s discuss the benefits, usage, and limitations of this new feature.

Spring’15 release came up with @testSetup method. This is one of the good features in this release for Test Class. Let’s discuss the benefits, usage, and limitations of this new feature.


  1. By setting up records once for the class, you don’t need to re-create records for each test method. It’s a good time saver.
  2. Reduces test execution times, especially when you’re working with many records.

Usage of Test Setup Method

In previous releases, while writing test classes, if you need same set of data in different methods, we created a common utility class with test records and call the utility method wherever we need it. So, calling the utility method multiple class from a Test class takes a longer time to finish the execution.

The new Test Setup method speeds up the Test Execution. Let us see an example as to how to use the Test Setup method,


private class SetupClassTest


@testSetup static void insertContact()


Contact cnt = new Contact();

cnt.LastName = ‘Arunkumar’;

cnt.Email = ‘testcontact@test.com’;

insert cnt;


static testMethod void updateContactEmail()


Contact cnt = [SELECT Name, Email FROM Contact];

System.assertEquals(cnt.Email, ‘testcontact@test.com’);

// update contact email address. This update is local to this test method only.

cnt.Email = ‘testupdated@test.com’;

update cnt;

System.assertEquals(cnt.Email, ‘testupdated@test.com’);

// Salesforce automatically rolled back to the original value.


static testMethod void verifyTheOriginalEmail()


Contact cnt = [SELECT Name, Email FROM Contact];

// verify the email original email address.

System.assertEquals(cnt.Email, ‘testcontact@test.com’);



  1. In the above test class, we inserted the Contact record in the Test Setup Method. So the inserted contact record is accessible in all test methods within the test class.
  2. Test setup methods are defined in a test class, take no arguments, and return no value.
  3. If a test class contains a test setup method, the testing framework executes the test setup method first, before any test method is executed in the class.


As per salesforce documentation, take a look on the below limitations before using this method,

  1. Test setup methods aren’t supported for @isTest (SeeAllData=true) annotation test classes. Hence, you can use this feature from the API version 24.0 or above.
  2. Multiple test setup methods are allowed in a test class, but the order in which they’re executed by the testing framework isn’t guaranteed.
  3. If a fatal error occurs during the execution of a test setup method, such as an exception that’s caused by a DML operation or an assertion failure, the entire test class fails, and no further tests in the class are executed.
  4. If a test setup method calls a non-test method of another class, no code coverage is calculated for the non-test method.


  1. Salesforce Spring’15 Release Notes
  2. Set Up Test Data for an Entire Test Class

About MST

At MST Solutions our cornerstone is to adapt, engage and create solutions which guarantee the success of our clients. The talent of our team and experiences in varied business verticals gives us an advantage over other competitors.

Recent Articles

Require Permission to View Lookup Fields (Critical Update)

We have a scenario to assign the record owner to a Queue based on some criteria. The non-admin users are unable to view the value of the Owner field once the Owner field is updated with the Queue. We found the root cause for this issue. One of the features of the Spring 20 release (Require Permission to View Record Names in Lookup Fields (Critical Update) causes this issue.

Read Article »

Work with us.

Our people aren’t just employees, they are key to the success of our business. We recognize the strengths of each individual and allow them time and resources to further develop those skills, crafting a culture of leaders who are passionate about where they are going within our organization.