こんにちは、にいるです。
SalesforceのrunAsメソッドの使い方について書いてみます。
1.runAsメソッドとは
runAsメソッドはテストで使用するメソッドです。
通常、Apexコードはすべてシステムモードで実行されますが、runAsメソッドを使用するとユーザを指定してApexを実行することができます。
つまり!特定のユーザでテストクラスを実行できるよっていう機能です。
コードはこんな感じで、引数にユーザを渡します。
1 2 3 |
System.runAs(u){ // 処理を記載 } |
また、runAsメソッドを使用すると、ユーザ権限と項目レベルの権限は強制実行されなく、レコード共有のみを適用します。
runAsメソッドの内の処理が完了すると、残りのApexは元のシステムモードで実行されます。
2.runAsメソッドを使用したサンプルコード
下記がrunAsメソッドを使用したサンプルコードです。
作成するユーザのプロファイルをSelectして、それを新規ユーザに割り当てています。
そして、Test.startTest内でrunAsメソッドを使用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// ユーザを作成する Profile p = [Select id,name From Profile Where name = '標準ユーザ' LIMIT 1]; User u = new User( alias = 'test9', username='test9@savepo.com.test', email='test9@savepo.com', ProfileId = p.id, emailencodingkey='UTF-8', lastname='test9', languagelocalekey='en_US', localesidkey='en_US', timezonesidkey='America/Los_Angeles' ); Insert u; Test.startTest(); // 作成したユーザで処理の実行 System.runAs(u){ // 処理を記載 } Test.stopTest(); |
あと、Salesforceのユーザライセンスは考慮しなくていいみたいです。
runAsメソッド内であれば、どれだけユーザを作っても制限にカウントされません。
runAsメソッド内であれば、どれだけユーザを作っても制限にカウントされません。
ただ、DMLの制限数にはカウントされるので、ガバナ制限制限には注意が必要です。
3.まとめ
いかがでしたでしょうか。
runAsメソッドを使用するシチェーションは共有権限の確認が多いと思います。
複雑な共有を実装している組織の場合には、いろんなユーザで参照権限がないかを確認しておくことをおすすめします。
皆さんもぜひ色々と試してみてください。
他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。
ではでは!
コメント