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

UserInfo.getProfileId() が Apex テストクラスの無効な profileId を返す

公開日: Aug 21, 2024
説明
自動プロセスユーザーコンテキストのプロファイルオブジェクトにクエリを実行する Apex テストクラスがある場合、API バージョン 41.0 以降であるとクエリが失敗し、レコードが返されません。この動作は SOQL 検索条件として UserInfo.getProfileId() を使用する場合にのみ発生します。

この理由は、API バージョン 41.0 以降では、テストクラスのコンテキストで 2 人の内部ユーザーが利用できるためです。これらのユーザーは通常のプロファイルを持たないため、エラーが発生します。 
解決策
これは設計どおりの動作です。

API v41.0 の導入により、2 人の内部ユーザーがシステム「自動化プロセス」および「Data.com Clean」に追加されました。内部ユーザーは通常のユーザーではなく、内部運用に使用される通常のプロファイルを持ちません。API の進歩により、テストクラスのコンテキストでこれらのユーザーが使用可能となり、API v40 以前で読み込まれるユーザーの代わりに読み込まれることになります。これによってエラーが発生します。

回避策として、Apex テストクラスのコンテキストでテストユーザーを作成し、UserInfo.getProfileId() メソッドでユーザーまたはプロファイルにクエリを実行する代わりに、System.runAs(testUsr) を使用してそのテストユーザーでロジックを実行することをお勧めします。機能するシナリオと機能しないシナリオの Apex テストクラスコードの例を次に示します。

機能しないシナリオ:
 
@isTest(SeeAllData = false)private class ProfileCheckTest {    static testMethod void testStartDate() {        User usr = [SELECT Id FROM User WHERE Name ='Automated Process' limit 1];        System.runAs(usr) {            String profileName = [SELECT Name FROM Profile WHERE Id =:UserInfo.getProfileId() LIMIT 1].Name;        }    }}

機能するシナリオ:
 
@isTest(SeeAllData = false)private class ProfileCheckTest {    static testMethod void testStartDate() {        User usr = new User();        usr.ProfileId = [SELECT Id FROM Profile WHERE Name != 'System Administrator' limit 1].Id;                           usr.LastName = 'Test';        usr.Email = 'test@test.com';        usr.Username = 'test@test.com' + System.currentTimeMillis();        usr.CompanyName = 'Salesforce';        usr.Title = 'Title';        usr.Alias = 'Roger';        usr.TimeZoneSidKey = 'America/Los_Angeles';        usr.EmailEncodingKey = 'UTF-8';        usr.LanguageLocaleKey = 'en_US';        usr.LocaleSidKey = 'en_US';        System.runAs(usr) {            String profileName = [SELECT Name FROM Profile WHERE Id =:UserInfo.getProfileId() LIMIT 1].Name;        }    }}

注意: ここで示しているコードは 1 つの例です。内容を確認し、組織に合わせて変更する必要があります。
ナレッジ記事番号

000383816

 
読み込み中
Salesforce Help | Article