Trailhead Apex トリガーの単体テストを作成するサンプル
環境
Salesforce apex
課題
単純な Apex トリガーの単体テストを作成する
姓が「INVALIDNAME」の取引先責任者に対する挿入や更新をブロックする単純な Apex トリガーを作成してインストールします。クラスのコードはハンズオン Challenge の「準備」セクションからコピーします。その後でコードカバー率 100% を達成する単体テストを作成します。
取引先責任者オブジェクトの Apex トリガーを作成する
名前: RestrictContactByName
コード: 上記のハンズオン Challenge の「準備」セクションからコピー
単体テストを別のテストクラスに配置する
名前: TestRestrictContactByName
目標: テストカバー率 100%
テストクラスを少なくとも 1 回実行する
1.RestrictContactByName という名前の Contact オブジェクトに Apex トリガーを作成する
trigger RestrictContactByName on Contact (before insert, before update) {
//無効なデータを挿入または更新する前に連絡先を確認する
for(Contact c : Trigger.New) {
if(c.LastName == 'INVALIDNAME') {
//invalidname is invalid
c.AddError('The Last Name "'+c.LastName+'" is not allowed for DML');
}
}
}
trigger RestrictContactByName on Contact (before insert, before update) {
//無効なデータを挿入または更新する前に連絡先を確認する
for(Contact c : Trigger.New) {
if(c.LastName == 'INVALIDNAME') {
//invalidname is invalid
c.AddError('The Last Name "'+c.LastName+'" is not allowed for DML');
}
}
}
trigger RestrictContactByName on Contact (before insert, before update) { //無効なデータを挿入または更新する前に連絡先を確認する for(Contact c : Trigger.New) { if(c.LastName == 'INVALIDNAME') { //invalidname is invalid c.AddError('The Last Name "'+c.LastName+'" is not allowed for DML'); } } }
2.単体テストクラスの作成
@isTest
private class TestRestrictContactByName {
@isTest static void InvalidName() {
Contact con = new Contact(LastName='INVALIDNAME');
System.Test.startTest();
Database.SaveResult result = Database.insert(con);
System.Test.stopTest();
System.assert(!result.isSuccess());
System.assertEquals('The Last Name "INVALIDNAME" is not allowed for DML', result.getErrors()[0].getMessage());
System.debug('Test Result: ' + result.getErrors()[0].getMessage());
}
@isTest static void ValidName() {
Contact con = new Contact(LastName='Jones');
System.Test.startTest();
Database.SaveResult result = Database.insert(con);
System.Test.stopTest();
System.assert(result.isSuccess());
}
}
@isTest
private class TestRestrictContactByName {
@isTest static void InvalidName() {
Contact con = new Contact(LastName='INVALIDNAME');
System.Test.startTest();
Database.SaveResult result = Database.insert(con);
System.Test.stopTest();
System.assert(!result.isSuccess());
System.assertEquals('The Last Name "INVALIDNAME" is not allowed for DML', result.getErrors()[0].getMessage());
System.debug('Test Result: ' + result.getErrors()[0].getMessage());
}
@isTest static void ValidName() {
Contact con = new Contact(LastName='Jones');
System.Test.startTest();
Database.SaveResult result = Database.insert(con);
System.Test.stopTest();
System.assert(result.isSuccess());
}
}
@isTest private class TestRestrictContactByName { @isTest static void InvalidName() { Contact con = new Contact(LastName='INVALIDNAME'); System.Test.startTest(); Database.SaveResult result = Database.insert(con); System.Test.stopTest(); System.assert(!result.isSuccess()); System.assertEquals('The Last Name "INVALIDNAME" is not allowed for DML', result.getErrors()[0].getMessage()); System.debug('Test Result: ' + result.getErrors()[0].getMessage()); } @isTest static void ValidName() { Contact con = new Contact(LastName='Jones'); System.Test.startTest(); Database.SaveResult result = Database.insert(con); System.Test.stopTest(); System.assert(result.isSuccess()); } }