Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

テストコードカバー率にシステム保護項目を設定する

公開日: Oct 13, 2022
説明
※この記事は英語版を翻訳しており、一部機械翻訳を含むため内容は後日更新される可能性があります。最新の内容は英語版を参照してください。表示言語は画面右下の言語名から切り替えられます。

使用事例によっては、レコードの CreatedDate、LastModifiedBy などのシステム項目を参照し、それに対してアクションを実行する Apex コードが必要になります。テストクラスから通常の DML 操作を使用して、テストコードのカバー率にシステム保護項目を設定する操作はサポートされていません。
 
たとえば、次のコードの行は保存されず、保存エラー「Save error : Field is not writable : Case.CreatedDate (保存エラー : 項目に書き込めません : Case. CreatedDate)」が表示されます。 
Case c = new Case(Status='Open', CreatedDate = Date.newinstance(2011, 4, 13).format()); 
API 24 以降を使用して、テストクラスを最新バージョンにアップグレードし、特定のシステム項目をテストコードで特定の値に設定する必要があるデータを作成することによって、より良いコードカバー率を達成するにはどうすればよいでしょうか? 
解決策
テストコードカバー率にシステム保護項目を設定する方法には、次の 2 つがあります:

a.Test.loadData() を使用する
b. JSON.deserialize() を使用する
 
1.Test.loadData を使用する 
 
このオプションでは、.csv ファイルを作成し、必要なデータをその .csv ファイルに入力する必要があります。csv ファイルの準備ができたら、csv ファイルを静的リソースとしてアップロードします。 
 
a. [設定] で [静的リソース] を検索し、静的リソースページで [新規] をクリックします。 
b. 静的リソースに「testCases」という名前を付けます。 
c. 先ほど作成したファイルを選択します。 
d. [保存] をクリックします。 
 
次に、テストメソッドで Test.loadData を呼び出し、テストケースのデータを入力します。 
 
コード例: 
@isTest 
private class caseUtil { 
    static testmethod void testLoadData() { 
        List < sObject > ls = Test.loadData(Case.sObjectType, 'testCases'); 

        Case c = (Case) ls[0]; 

        System.assert(ls.size() == 1); 
        String cStatus = c.Status; 
        DateTime cDate = c.CreatedDate; 

        System.debug('Case Id: ' + c.Id); 
        System.debug('Case Status: ' + cStatus); 
        System.debug('Case Date: ' + cDate); 

        c.status = 'New'; 

        update c; 

        System.debug('Case status: ' + c.status); 
    }
}
 
2.JSON.deserialize を使用する 
JSON.deserialize を使用すると、任意の CreatedDate 値を持つ sObject をメモリに作成できます。これは、createdDate 値の設定を妨げる通常の参照のみの項目属性を強制しません。 
 
コード例: 
@isTest 
private class CaseTest { 
    static testmethod void testLoadData() { 
        String caseJSON = '{"attributes":{"type":"CasSe","url":"/services/data/v25.0/sobjects/Case/500E0000002nH2fIAE"},"Id":"500E0000002nH2fIAE","Status":"Open","CreatedDate":"2012-10-04T17:54:26.000+0000"}'; 
        Case c = (Case) JSON.deserialize(caseJSON, Case.class); 
        System.debug('Test case:' + c.createdDate); 
        System.debug('Test caseId:' + c.Id); 
        System.debug('Test caseStatus:' + c.status); 

        Case c1 = new Case(); 
        c1.Id = c.Id; 
        c1.status = 'New'; 
        update c1; 

        System.debug('Test caseStatus1:' + c1.status); 

    } 
}
 
その他のリソース

Loading Test Data

ナレッジ記事番号

000386257

 
読み込み中
Salesforce Help | Article