Apexのテストクラスを書く時の備忘録
テストのカバレッジは75%以上をキープする
・テストクラスの作成方法
普段のApexクラス作成と同じ
開発者コンソール>File>New>Apex Class
作成したクラスの一番上に「@isTest」をつける。
・テストレコード作成
テストクラスのメソッドには「@isTest」をつける。
テスト開始:Test.startTest();
テスト終了:Test.stopTest();
ユーザを指定してApexを実行:System.tunAs(ユーザ){}
以下のような使い方をする。
@isTest static void testMethod() { User usr = [SELECT Id, Name FROM User WHERE Username = 'xxx']; Test.startTest(); System.runAs(usr) {…} Test.stopTest(); }
テストレコードを作りたいときは以下の方法がある。
【方法1】
アノテーション:@TestSetup
本クラス内すべてのテストメソッドで使用できるテストレコードの作成
(例)
@TestSetup static void setup() { Account acc = new Account(Name = 'xxx'); insert acc; Contact con = new Contact( LastName = 'x1', FirstName = 'x2', Email = 'x3@xxx.com', HomePhone = '0000000000', Phone = '0000000000', Birthdate = Date.newInstance(2000, 1, 1), AccountId = acc.Id); insert con; User usr = new User( Username = 'y1', Email = 'x1@xxx.com', LastName = 'x1', FirstName = 'x2', Alias = 'y2', TimeZoneSidKey = 'Asia/Tokyo', LocalSidKey = 'ja_JP', ProfileId = [SELECT Id FROM profile WHERE Name = 'zzz'].id, CommunityNickname = 'y3', Phone = '0000000000', LanguageLocaleKey = 'ja', EmailEncodingKey = 'ISO-2022-JP', contactId = con.Id); insert usr; }
各メソッドでテストレコードをgetしたい場合、以下のようにプライベートメソッドを作っておくと
使いまわせて便利。
private static User getContact(String conId) { return [SELECT Id FROM Contact WHERE Id = conId ]; }
@isTest static void testMethod() { Contact con = getContact('xxxxxxxx'); }
【方法2】
テストメソッドに直接書く
※テストレコードを書く場所に注意。
SFDC環境によってテスト開始(runAs()やstartTest())後に書くとうまくいかないことがある
→権限によって処理できない可能性があるため。
テスト開始前にテストレコードを取得する。
@isTest static void testMethod() { Account acc = new Account(Name = 'xxx'); insert acc; User usr = [SELECT Id, Name FROM User WHERE Username = 'xxx']; Test.startTest(); System.runAs(usr) {…} Test.stopTest(); }