権限ベースのテストを記述する
学習の目的
この単元を完了すると、次のことができるようになります。
- 権限ベースのテストの重要性を説明する。
- 権限ベースの単体テストを記述する。
パターン
開発者の多くは、コードの権限テストを記述すべきと考えています。次の動画で、権限ベースの単体テストの概要をご覧ください。
権限ベースのテストは、テストの中でもパターンが一番複雑になる可能性があります。その理由の 1 つは、権限が混乱を招きやすいことです。もう 1 つの理由は、適切な一連の権限テストで、ポジティブとネガティブの両方のテストパターンが使用されることです。権限テストを記述するには、テストデータだけでなく、1 人以上のテストユーザーを生成する必要があります。この両方を作成したら、ポジティブとネガティブの両方のテストを記述して、特定の権限があるテストユーザー、または権限がないテストユーザーとして実行できます。
では、権限テストのパターンを見てみましょう。
- テストデータを生成するか読み込みます。
- 適切な権限セットがあるユーザーを作成します。
System.runAs(user)
ブロックを開始します。- 単元 3 と 4 で見てきたように、
System.runAs(user)
ブロック内でネガティブテストまたはポジティブテストを実行します。
権限セットテストは唯一、独自のテストデータを作成する必要がありません。権限セットとは、付与されている権限の詳細を記したレコードです。これらの権限セットレコードは、実質的にメタデータで、データではありません。権限セットは組織設定の一部であるため、テスト時に既存の権限セットを使用します。したがって、このテストでは、テストユーザーを作成し、そのユーザーに既存の権限セットを割り当てるだけで済みます。
このモジュールの単元 1 でインストールしたパッケージに、Private_Object_Access
という権限セットと、組織の共有設定が非公開に設定されているカスタムオブジェクトが付属します。この 2 つを利用した権限セットテストがどのようになるか見てみましょう。
- VS Code を開きます。
- [Explorer (エクスプローラー)] サイドバーで、
classes
フォルダーを右クリックし、[SFDX: Create Apex Class (SFDX: Apex クラスを作成)] を選択します。 - 新しいクラスに
PermissionsTests
と名前を付け、デフォルトのディレクトリを受け入れます。 - クラスの内容を次のコードに置き換えます。
- [File (ファイル)] > [Save (保存)] をクリックします。
- 作業中のファイルを右クリックして、[SFDX: Deploy Source To Org (SFDX: 組織にソースをリリース)] を選択します。
testNegativePermissionSet
メソッドに表示される [Run Test (テストを実行)] ボタンをクリックします。
コードのポイント
上記のコードのテストメソッドで、権限セットがないユーザーは Private_Object__c
レコードを表示できないことが示されます。
この例の @TestSetup
メソッドは、取引先に関連付けられた Private_Object__c
レコードを作成します。共有モデルが非公開に設定されているため、このレコードを表示できるのはシステムのみです。実際のテストメソッドを実行すると、新しいユーザーが作成され、そのユーザーとしてクエリが実行されます。その結果、新しいユーザーが Private_Object__c
レコードを表示できなくなります。