How to do @TestSet in Test Classes
The @TestSetup annotation is used in test classes to create common data in test classes. Data created in the @TestSetup method is common for all the test methods in the test class.
Syntax
The @TestSetup method follows the following syntax :
@testSetup static void setup() {
//Create Account
Account acc = new Account();
acc.Name = ‘Test’;
insert acc;
}
The @testSetup method must be a static method and it is the first method to run when the test class is executed.
Advantages of @testSetup
- We don’t need to create test data again and again in each test method with using @testSetup.
- Each and every test method gets the same data from the @testsetup method, it doesn’t matter if any other test method modifies the data.
- Allows better way build test classes by moving all the data creation into a common piece of code.
Limitations of @testSetup
- Only one @testSetup can be declared per test class.
- If we use seeAllData = true is used in our test class, the @testSetup method is not available.
- This method is only available above api version 24.0 and above.
Example
@isTest
private class TestSetupExample {
@testSetup static void setup() {
//Create Account
Account acc = new Account();
acc.Name = ‘Test’;
insert acc;
}
static testmethod void method1 ()
{
//Fetch data here
Acc acc = [SELECT Id,Name FROM Account];
acc.Name = ‘test2’;
Test.startTest();
update acc;
Test.stopTest():
}
static testmethod void method2 ()
{
//Fetch data here
Acc acc = [SELECT Id,Name FROM Account];
acc.Name = ‘test3’;
Test.startTest();
update acc;
Test.stopTest():
}
}
As displayed above, we can query the same Account record in both the method1() and method2() test methods.
