この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

runAs メソッドの使用

一般に、Apex コードはすべてシステムモードで実行され、現在のユーザの権限やレコード共有は考慮されません。ユーザのレコード共有を強制実行するために、システムメソッド runAs を使用して、コンテキストユーザを既存のユーザまたは新規ユーザに変更するテストメソッドを作成できます。runAs メソッドはユーザ権限または項目レベルの権限を強制実行せず、レコード共有のみを適用します。

テストメソッドのみで runAs を使用できます。元のシステムコンテキストは、すべての runAs テストメソッドが完了した後で再開されます。

runAs メソッドは、ユーザライセンスの制限を無視します。組織に追加ユーザライセンスがない場合でも、runAs で新しいユーザを作成できます。

runAs の各コールは、プロセスで発行される DML ステートメントの合計数にカウントされます。

メモ

次の例では、新しいテストユーザが作成され、コードがそのユーザとして、ユーザのレコード共有アクセス権を使用して実行されます。

1swfobject.registerObject("clippy.codeblock-0", "9");@isTest
2private class TestRunAs {
3   public static testMethod void testRunAs() {
4      // Setup test data
5      // This code runs as the system user
6      Profile p = [SELECT Id FROM Profile WHERE Name='Standard User']; 
7      User u = new User(Alias = 'standt', Email='standarduser@testorg.com', 
8      EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US', 
9      LocaleSidKey='en_US', ProfileId = p.Id, 
10      TimeZoneSidKey='America/Los_Angeles', UserName='standarduser@testorg.com');
11
12      System.runAs(u) {
13         // The following code runs as user 'u' 
14         System.debug('Current User: ' + UserInfo.getUserName());
15         System.debug('Current Profile: ' + UserInfo.getProfileId()); 
16      }
17   }
18}

複数の runAs メソッドをネストできます。次に例を示します。

1swfobject.registerObject("clippy.codeblock-1", "9");@isTest
2private class TestRunAs2 {
3
4   public static testMethod void test2() { 
5
6      Profile p = [SELECT Id FROM Profile WHERE Name='Standard User']; 
7      User u2 = new User(Alias = 'newUser', Email='newuser@testorg.com', 
8         EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US', 
9         LocaleSidKey='en_US', ProfileId = p.Id, 
10         TimeZoneSidKey='America/Los_Angeles', UserName='newuser@testorg.com');
11
12      System.runAs(u2) {
13         // The following code runs as user u2. 
14         System.debug('Current User: ' + UserInfo.getUserName());
15         System.debug('Current Profile: ' + UserInfo.getProfileId()); 
16
17         // The following code runs as user u3. 
18         User u3 = [SELECT Id FROM User WHERE UserName='newuser@testorg.com'];
19         System.runAs(u3) {
20            System.debug('Current User: ' + UserInfo.getUserName());
21            System.debug('Current Profile: ' + UserInfo.getProfileId()); 
22         }
23
24         // Any additional code here would run as user u2.
25      }
26   }
27}

runAs のその他の使用

DML 操作を runAs ブロックで囲むことで、runAs メソッドを使用して混合 DML 操作をテストで実行することもできます。この方法では、設定オブジェクトを他の sObject と一緒に挿入または更新しようとすると返される混合 DML エラーを回避できます。DML 操作で同時に使用できない sObjectを参照してください。

パッケージバージョンを引数として取る、runAs メソッド (runAs(System.Version)) の別のオーバーロードがありま��。このメソッドによって、管理パッケージ��特定のバージョンのコードが使用されます。runAs メソッドの使用とパッケージバージョンコンテキストの指定についての詳細は、パッケージバージョンの動作のテストを参照してください。