1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Salesforse】【テストクラス】使ってる?TestSetup アノテーション

Last updated at Posted at 2023-09-05

TestSetup アノテーション
Salesforce開発者のなかでも使っている人を見るほうが少ない印象、、
けど使ったほうが絶対いいと思うので個人的に布教しています(*'ω'*)

TestSetup アノテーションってなに

詳しくはTestSetup アノテーションの開発者ガイド↓を置いておくので読んでくだされ。

この中に

テスト設定メソッドで作成されたレコードは、テストクラス内のすべてのテストメソッドで使用でき

って書いてて、これが重要。

データなんてテストメソッドごとに作ればいい?ほんとに?

ってことで中身は適当ですが、
TestSetup アノテーションを使用して取引先と商談のレコードを作るテストクラス

TestSetup アノテーションを使用せず、テストメソッドごとに取引先と商談のレコードを作るテストクラス
を簡単に書いてみました。

TestSetup使用あり
@isTest
private class SetupTest {
    @TestSetup 
    static void setup(){
        // 取引先を作成
        Account acc = TestDataFactory.createAccount(true);
        // 商談を作成
        Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);
    }

    @isTest
    static void UpdateOpportunityTest1() {
        Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 1);
        Test.stopTest();
    }

    @isTest
    static void UpdateOpportunityTest2() {
        Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 2);
        Test.stopTest();
    }

    @isTest
    static void UpdateOpportunityTest3() {
        Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 3);
        Test.stopTest();
    }

    @isTest
    static void UpdateOpportunityTest4() {
        Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 4);
        Test.stopTest();
    }

    @isTest
    static void UpdateOpportunityTest5() {
        Opportunity opp = [SELECT Id FROM Opportunity LIMIT 1];

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 5);
        Test.stopTest();
    }
}
TestSetup使用なし
@isTest
private class NoSetupTest {
    @isTest
    static void UpdateOpportunityTest1() {
        // 取引先を作成
        Account acc = TestDataFactory.createAccount(true);
        // 商談を作成
        Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 1);
        Test.stopTest();
    }

    @isTest
    static void UpdateOpportunityTest2() {
        // 取引先を作成
        Account acc = TestDataFactory.createAccount(true);
        // 商談を作成
        Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 2);
        Test.stopTest();
    }

    @isTest
    static void UpdateOpportunityTest3() {
        // 取引先を作成
        Account acc = TestDataFactory.createAccount(true);
        // 商談を作成
        Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 3);
        Test.stopTest();
    }

    @isTest
    static void UpdateOpportunityTest4() {
        // 取引先を作成
        Account acc = TestDataFactory.createAccount(true);
        // 商談を作成
        Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 4);
        Test.stopTest();
    }

    @isTest
    static void UpdateOpportunityTest5() {
        // 取引先を作成
        Account acc = TestDataFactory.createAccount(true);
        // 商談を作成
        Opportunity opp = TestDataFactory.createOpportunity(acc.Id, true);

        Test.startTest();
        piepie001.UpdateOpportunity(opp.Id, 5);
        Test.stopTest();
    }
}

実行速度を見てみましょう

念のため3回試行します。

1回目

TestSetup使用あり
image.png

TestSetup使用なし
image.png

2回目

TestSetup使用あり
image.png

TestSetup使用なし
image.png

3回目

TestSetup使用あり
image.png

TestSetup使用なし
image.png

結果

image.png
取引先と商談を1レコード作るだけでこの差です。
どちらが良いかは、言わずもがなですね!

あとがき

テストクラスに関しては思想強めのぴえさんです。
ネタはいくつかあるので他にも書いてまとめる予定(*'ω'*)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?