Apex-Metadata API(4)

学习目标 完成本单元后,您将能够: 描述你可以做什么,不能测试元数据部署。 解释如何测试元数据容器。 解释如何测试元数据回调。 测试您的元数据部署 没有测试覆盖率,没有Apex代码是完整的。因此,您使用Apex元数据API编写的任何代码都必须经过适当的测试。让我们看看你可以测试什么(以及你不能)。 测试元数据部署的主要重点是部署请求的设置和部署结果的处理。要验证请求,可以测试部署容器是否设置正确。...

📅 2018-01-27 ✍️ ponybai 🏷️ Apex-Metadata API

学习目标

完成本单元后,您将能够:
  • 描述你可以做什么,不能测试元数据部署。
  • 解释如何测试元数据容器。
  • 解释如何测试元数据回调。

测试您的元数据部署

没有测试覆盖率,没有Apex代码是完整的。因此,您使用Apex元数据API编写的任何代码都必须经过适当的测试。让我们看看你可以测试什么(以及你不能)。 测试元数据部署的主要重点是部署请求的设置和部署结果的处理。要验证请求,可以测试部署容器是否设置正确。要测试部署结果,可以测试您的部署回调按预期运行。 实际上,您无法测试部署后组织的外观。但是测试容器和回调是确保一切正常工作的好方法。

测试您的部署容器

要测试您的部署请求代码,您可以验证所创建的元数据组件和组件值。使用assert语句来确保部署容器包含您所期望的。 下面的代码为您提供了关于我们在单元2中创建的DeployMetadata类的测试类的外观。testDeployment方法创建一个部署请求,并检索我们创建的布局元数据。然后,您可以浏览元数据以确保它包含我们创建的自定义字段。
  1. 点击设置装置,然后点击开发者控制台,打开 Developer Console.
  2. 在开发者控制台中,点击 File | New | Apex Class.
  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);
       
        // 执行布局元数据的各种断言。
        System.assertEquals('Account-Account Layout', md.fullName);
    }
}
测试您的部署回调
要测试您的部署结果,请验证回调是否处理预期的和意外的结果。您的回调通常由Salesforce作为异步部署过程的一部分调用。因此,要在部署过程之外测试回调,请直接创建使用回调类的测试。 以下是我们在单元2中创建的PostInstallCallback类的测试类的样子。代码实例化回调,并创建DeployResults和DeployCallbackContext对象的测试实例。它使用这些测试实例来验证DeployCallback.handleResults方法。 从开发人员控制台中,使用名称MyDeploymentCallbackTest和以下代码创建一个Apex类。
@IsTest
public class MyDeploymentCallbackTest {
    @IsTest
    static void testMyCallback() {
        
        // 实例化回调。
        Metadata.DeployCallback callback = new PostInstallCallback();
       
        // 创建测试结果和上下文对象。
        Metadata.DeployResult result = new Metadata.DeployResult();
        result.numberComponentErrors = 1;
        Metadata.DeployCallbackContext context = new Metadata.DeployCallbackContext();
        
        // 调用回调的handleResult方法。
        callback.handleResult(result, context);
    }
}
在这个例子中,DeployCallbackContext返回一个空的作业ID(通过getCallbackJobId方法)。如果您需要非空值,则可以创建DeployCallbackContext的子类并提供自己的getCallbackJobId方法实现。例如:
// 用于测试的DeployCallbackContext子类返回myJobId。
public class TestingDeployCallbackContext extends Metadata.DeployCallbackContext {
    private Id myJobId = null; //设置为一个固定的ID,你可以用来测试。
    public override Id getCallbackJobId() {
        return myJobId;
    }
}
注意

Apex Metadata API不是为测试其他代码而构建的。使用Apex元数据API为单元测试打开和关闭功能是很诱人的。但是,由于Apex元数据API依赖于异步部署,因此与Apex的同步测试不兼容。