apex测试类中的TestSetUp方法

转载:http://www.sfdcpoint.com/salesforce/testsetup-method-in-apex-test-classes/

apex测试类中的TestSetUp方法

测试类方法中的@testsetup批注

测试类是Salesforce中总体SDLC的重要组成部分。作为开发人员,我们必须经常编写测试类,并且还需要创建测试数据,以使我们的测试类成功执行。我们将介绍在Salesforce测试类中引入的新概念,即在顶点测试类中使用TestSetUp方法。

最初,我们必须在每种测试方法中创建测试数据,因为每种测试方法都被视为具有自己的调控器限制的不同事务。但是Salesforce 为测试类方法引入了@TestSetUp 批注。您可以在测试类中编写一个方法,并应用@TestSetUp批注,然后在此方法中创建所有通用测试数据。

以下是有关@TestSetUp方法的一些关键点:

  • 标有@TestSetUp批注的方法在任何testMethod之前执行。
  • 用这种方法创建的数据不需要一次又一次地创建,并且默认情况下可用于所有测试方法。
  • 每个测试类只能有一种设置方法。
  • 测试设置方法仅在测试类的默认数据隔离模式下受支持。如果测试类别或测试方法可以通过使用@isTest(SeeAllData = true) 注解,此类不支持测试设置方法。 
  • 测试设置方法仅适用于24.0或更高版本。
  • 每个测试方法都将获得在setup方法中创建的测试数据的不变版本,无论是否有其他测试方法修改了数据都无所谓。我们将在以下示例的testMethod2中显示此内容。

 

@testsetup示例

下面是一个示例代码,它将显示每种测试方法中如何提供测试数据。

1个
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18岁
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@isTest
private class TestSetupMethodExample {
    //Below is a method with @testsetup annotation, the name can be anything like setup(), oneTimeData(), etc.
    @testSetup static void setup() {
        // Create common test accounts
        List testAccts = new List();
        for(Integer i=0;i<2;i++) {
            testAccts.add(new Account(Name = 'TestAcct'+i));
        }
        insert testAccts;
    }
 
    @isTest static void testMethod1() {
        // Here, we will see if test data created in setup method is available or not, Get the first test account by using a SOQL query
        Account acct = [SELECT Id FROM Account WHERE Name='TestAcct0' LIMIT 1];
        // Modify first account
        acct.Phone = '555-1212';
        // This update is local to this test method only.
        update acct;
 
        // Delete second account
        Account acct2 = [SELECT Id FROM Account WHERE Name='TestAcct1' LIMIT 1];
        // This deletion is local to this test method only.
        delete acct2;
 
        // Perform some testing
    }
 
    @isTest static void testMethod2() {
        // The changes made by testMethod1() are rolled back and
        // are not visible to this test method.
        // Get the first account by using a SOQL query
        Account acct = [SELECT Phone FROM Account WHERE Name='TestAcct0' LIMIT 1];
        // Verify that test account created by test setup method is unaltered.
        System.assertEquals(null, acct.Phone);
 
        // Get the second account by using a SOQL query
        Account acct2 = [SELECT Id FROM Account WHERE Name='TestAcct1' LIMIT 1];
        // Verify test account created by test setup method is unaltered.
        System.assertNotEquals(null, acct2);
 
        // Perform some testing
    }
 
}

因为创建的测试数据数量较少,所以在测试类结束时回滚记录所需的时间更少。实际上,这最终会提高性能并减少运行测试类的时间。

你可能感兴趣的:(apex测试类中的TestSetUp方法)