特定プロファイルのユーザとしてApexテストを実行する方法

By | July 7, 2021

前書き

通常システムコンテクストで実行されるApexテストに関して、任意のユーザコンテクストでの実行を行いたい場合、System.runAs()メソッドを利用します。

例えば、PlatformライセンスのユーザとしてApexを実行した場合に問題が発生しないかどうかをテストしたい場合、テストクラス内でPlatformライセンスのユーザを生成したうえでrunAsメソッドを用いることにより、PlatformライセンスのユーザとしてApex Testを実行することが可能となります。

サンプルコード(権限セットなしの場合)

String uniqueUserName = 'standarduser' + DateTime.now().getTime() + '@testorg.com';
Profile p = [SELECT Id FROM Profile WHERE Name='プロファイル名'];
User u = new User(
Alias = 'standt', 
Email='standarduser@testorg.com',
EmailEncodingKey='UTF-8', 
LastName='Testing', 
LanguageLocaleKey='ja_JP',
LocaleSidKey='ja_JP',
ProfileId = p.Id,
TimeZoneSidKey='Asia/Tokyo',
UserName=uniqueUserName);

insert u;

System.runAs(u) {
 //具体的な処理
}

サンプルコード(権限セットありの場合)

String uniqueUserName = 'standarduser' + DateTime.now().getTime() + '@testorg.com';
Profile p = [SELECT Id FROM Profile WHERE Name='プロファイル名'];
User u = new User(
Alias = 'standt', 
Email='standarduser@testorg.com',
EmailEncodingKey='UTF-8', 
LastName='Testing', 
LanguageLocaleKey='ja_JP',
LocaleSidKey='ja_JP',
ProfileId = p.Id,
TimeZoneSidKey='Asia/Tokyo',
UserName=uniqueUserName);

insert u;

PermissionSet ps = [SELECT Id FROM PermissionSet WHERE Name = '権限セット名'];
insert new PermissionSetAssignment(AssigneeId = u.Id, PermissionSetId = ps.Id);

System.runAs(u) {
 //具体的な処理
}