前書き
通常システムコンテクストで実行される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) {
//具体的な処理
}