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