進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

メタデータのリリースのテスト

学習の目的

この単元を完了すると、次のことができるようになります。
  • メタデータのリリースについてテストできることとできないことを説明する。
  • メタデータコンテナのテスト方法を説明する。
  • メタデータコールバックのテスト方法を説明する。

メタデータのリリースのテスト

Apex コードを完成させるにはテストカバー率が必要です。そのため、Apex メタデータ API を使用して記述したコードを適切にテストする必要があります。では、何をテストできるか (できないか) を見てみましょう。

メタデータのリリースをテストする場合、中心となるのはリリース要求の設定とリリース結果の処理です。要求を検証するには、リリースコンテナが適切に設定されるかテストします。リリース結果を検証するには、リリースコールバックが期待どおりに動作するかテストします。

リリース後に組織がどうなるかを実際にテストすることはできません。しかし、コンテナとコールバックのテストは、すべてが正常に機能することを確認するのに適した方法です。

リリースコンテナをテストする

リリース要求コードをテストするには、メタデータコンポーネントと作成されたコンポーネント値を検証します。assert ステートメントを使用して、リリースコンテナの内容が正確で期待どおりであることを確認します。

単元 2 で作成した DeployMetadata クラスのテストクラスがどのようになるかは、以下のコードを参照してください。testDeployment メソッドは、リリース要求を作成し、作成済みのレイアウトメタデータを取得します。そのメタデータを調べて、作成したカスタム項目が含まれていることを確認できます。

  1. [設定] ギア、[開発者コンソール] の順にクリックして開発者コンソールを開きます。
  2. 開発者コンソールで、[File (ファイル)] | [New (新規)] | [Apex Class (Apex クラス)] をクリックします。
  3. このクラスに DeploymentTest という名前を付け、[OK] をクリックします。
  4. 既存のコードをすべて削除し、次のコード例をコピーしてその場所に貼り付けます。
@IsTest
public class DeploymentTest {
    @IsTest
    static void testDeployment() {
        DeployMetadata deployMd = new DeployMetadata();
        
        Metadata.DeployContainer container = deployMd.constructDeploymentRequest();
        List<Metadata.Metadata> contents = container.getMetadata();
        System.assertEquals(1, contents.size());
        Metadata.Layout md = (Metadata.Layout) contents.get(0);
       
        // Perform various assertions the layout metadata.
        System.assertEquals('Account-Account Layout', md.fullName);
    }
}

リリースコールバックをテストする

リリース結果をテストするには、コールバックで期待どおりの結果と予期しない結果が処理されることを検証します。コールバックは通常、非同期のリリースプロセスの一環で Salesforce にコールされます。したがって、リリースのプロセス外でコールバックをテストするために、コールバッククラスを直接使用するテストを作成します。

単元 2 で作成した PostInstallCallback クラスのテストクラスは以下のようになります。このコードはコールバックをインスタンス化し、DeployResults オブジェクトと DeployCallbackContext オブジェクトのテストインスタンスを作成します。これらのテストインスタンスを使用して DeployCallback.handleResults メソッドを検証します。

開発者コンソールで、「MyDeploymentCallbackTest」という名前と次のコードで Apex クラスを作成します。

@IsTest
public class MyDeploymentCallbackTest {
    @IsTest
    static void testMyCallback() {
        
        // Instantiate the callback.
        Metadata.DeployCallback callback = new PostInstallCallback();
       
        // Create test result and context objects.
        Metadata.DeployResult result = new Metadata.DeployResult();
        result.numberComponentErrors = 1;
        Metadata.DeployCallbackContext context = new Metadata.DeployCallbackContext();
        
        // Invoke the callback's handleResult method.
        callback.handleResult(result, context);
    }
}

この例では、DeployCallbackContext は null のジョブ ID を (getCallbackJobId メソッドを介して) 返します。null 以外の値が必要な場合、DeployCallbackContext のサブクラスを作成し、getCallbackJobId メソッドの独自の実装を指定します。次に例を示します。

// DeployCallbackContext subclass for testing that returns myJobId.
public class TestingDeployCallbackContext extends Metadata.DeployCallbackContext {
    private Id myJobId = null; // Set to a fixed ID you can use for testing.
    public override Id getCallbackJobId() {
        return myJobId;
    }
}
メモ

メモ

Apex Metadata API は、他のコードをテストするためには作成されていません。Apex メタデータ API を使用して、単体テストで機能のオンオフを切り替えたいと思うかもしれませんが、Apex メタデータ API は非同期リリースに依存しているため、Apex の同期テストとは互換性がありません。

リソース