S.B.S. Salesforce技術ブログ

教えて921さん!

Salesforce テストクラスとは

皆さんこんにちは、yumotoです!

今回はApexのテストクラスについて説明しようと思います!

テストクラスとは

SalesforceではApexというJavaに似た言語を使ってプログラムを開発することが可能です。

通常、sandboxというテスト環境にてプログラムを開発するのですが、本番の環境にデプロイする際にはテストカバー率というものを75%以上にしなければなりません。

ここで必要なのがテストクラスという別のプログラムになります。

では実際にテストクラスとは何なのか。

例えば以下のようなトリガをsandbox上で作成したとします。
(取引先がinsertされたとき、その取引先の業種がNullだったらotherを入れてあげるトリガ)

trigger Trigger_Account on Account (before insert) {
    if(Trigger.isInsert){
        if(Trigger.isBefore){
            for(Account a :Trigger.new){
                if(a.Industry == null){
                    a.Industry = 'other';
                }
            }
        }
    }
}

これを本番環境にデプロイしようとする前にテストをしなければなりません。

テストの方法は大きく分けて2種類
Salesforceの画面で動きを確かめる方法
②プログラム上でテストをする方法

今回の例では
①番は、Salesforceの画面から取引先を新規で作成、作成された取引先の業種の値を確かめる方法になることは想像できると思います。

②番で必要になるのがテストクラスです!!

テストクラスとはずばり、
想定される動作をプログラム上から実行して、
作成したプログラム(トリガ)をテストするクラス

のことです。

上で書いたトリガに対するテストクラスの例はこちら

@isTest
public class test_Trigger_Account {
    @isTest
    private static void test01(){
        List<Account> accountList = new List<Account>();
        
        //取引先1
        //業種NULL
        Account acc1 = new Account();
        acc1.Name = 'acc1';
        AccountList.add(acc1);
        
        //取引先2
        //業種NotNull
        Account acc2 = new Account();
        acc2.Name = 'acc2';
        acc2.Industry = 'Technology';
        AccountList.add(acc2);
        
        Test.startTest();
        insert AccountList;
        Test.stopTest();        
    }
}

今回作成したトリガは「取引先がinsertされたとき、その取引先の業種がNullだったらotherを入れてあげるトリガ」なので、
プログラム上でも、業種が入っていない取引先、業種が入っている取引先、この2つを準備してInsertしています。

このプログラムを走らせることによって、作成したトリガをテストすることができます! f:id:sbsSF:20200915114733p:plain

そして作成したトリガのコードカバー率を見てみると100%になっていることが確認できます! f:id:sbsSF:20200915114947p:plain

まとめ

今回作成したトリガは簡単なものでしたので、テストクラスも簡単なものでした。

作成したプログラムが複雑になってくると、テストクラスの記述が複雑になってきます。

次回はそのあたり、テストクラスの書き方等詳しく紹介できればと思っています。