皆さんこんにちは、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しています。
このプログラムを走らせることによって、作成したトリガをテストすることができます!
そして作成したトリガのコードカバー率を見てみると100%になっていることが確認できます!
まとめ
今回作成したトリガは簡単なものでしたので、テストクラスも簡単なものでした。
作成したプログラムが複雑になってくると、テストクラスの記述が複雑になってきます。
次回はそのあたり、テストクラスの書き方等詳しく紹介できればと思っています。