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();
}