【问题标题】:Create Mock Custom Metadata with Child Relationship Query使用子关系查询创建模拟自定义元数据
【发布时间】:2020-08-14 21:29:40
【问题描述】:

我有一个控制器类,我在该类上对自定义元数据类型记录执行 SOQL 查询。 SOQL 查询还包含一个子关系查询(Master-Detail 关系)。 我需要使用模拟自定义元数据记录编写测试

@AuraEnabled(cacheable=true)
public static List<Response> getLeadMetadataValues() {
    List<Lead_Business_Status__mdt> leadBusinessStatusList = [
            SELECT Id, Label, DeveloperName, Index__c,
                (SELECT Id, Label, DeveloperName, Reason_Status_Api_Name__c FROM Lead_Reason_Status__r)
            FROM Lead_Business_Status__mdt ORDER BY Index__c ASC
    ];

    List<Response> resList = new List<Response>();
    if (Test.isRunningTest()) {
        leadBusinessStatusList = new List<Lead_Business_Status__mdt>();
        leadBusinessStatusList.add(createMock());
    }

    for (Lead_Business_Status__mdt bs : leadBusinessStatusList) {
        Response res = new Response();
        res.Id = bs.Id;
        res.businessStatusLabel = bs.Label;
        res.businessStatusDevName = bs.DeveloperName;
        res.index = bs.Index__c;
        for (Lead_Reason_Status__mdt rs : bs.Lead_Reason_Status__r) {
            ReasonStatus rsObj = new ReasonStatus();
            rsObj.Id = rs.Id;
            rsObj.reasonStatusLabel = rs.Label;
            rsObj.reasonStatusDevName = rs.DeveloperName;
            rsObj.fieldApiName = rs.Reason_Status_Api_Name__c;
            res.reasonStatusList.add(rsObj);
        }
        resList.add(res);
    }
    return resList;
}

我使用 Test.isRunningTest() 用模拟数据填充leadBusinessStatusList。 我能够为主记录创建一个模拟对象:Lead_Business_Status__mdt 和详细记录:Lead_Reason_Status__mdt。但是,我无法将详细记录添加到相关列表中:Lead_Reason_Status__r

private static Lead_Business_Status__mdt createMock() {
    String reasonStatusStr = '{"Label":"Transfer to Queue", "DeveloperName":"Transfer_to_Queue", "Reason_Status_Api_Name__c":"Transfer_to_Queue"}';
    Lead_Reason_Status__mdt reasonStatusObj = (Lead_Reason_Status__mdt) System.JSON.deserialize(reasonStatusStr, Lead_Reason_Status__mdt.class);
    System.debug('Lead_Reason_Status__mdt: ' + reasonStatusObj);

    String businessStatusStr = '{"Label":"Wrong Lead", "DeveloperName":"Wrong_Lead", "Index__c":"1"}';
    Lead_Business_Status__mdt businessStatusObj = (Lead_Business_Status__mdt) System.JSON.deserialize(businessStatusStr, Lead_Business_Status__mdt.class);

    return businessStatusObj;
}

除了 Lead_Reason_Status__mdt 的内部 for 循环外,测试都被覆盖。 如何通过填充子关系列表创建模拟对象?

【问题讨论】:

    标签: salesforce apex


    【解决方案1】:

    您可以尝试使用 JSON.deserialize 方法来设置这些元数据记录吗?

    List<Lead_Business_Status__mdt> leadBusinessStatusList  = (List< Lead_Business_Status__mdt >) JSON.deserialize( '[{"Id": "xoid914011599", "Label": "test", "DeveloperName": "test","Reason_Status_Api_Name__c": "test"}, {"Id": "xoid9140115992","Label":"test2","DeveloperName": "test2","Reason_Status_Api_Name__c": "test2"}]', List<Lead_Business_Status__mdt>.class );
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2020-06-26
      • 2020-11-15
      • 2012-03-09
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多