可调用方法 (Salesforce Apex) 的测试类失败(不确定是否覆盖 100%)

问题描述 投票:0回答:1

我成功创建了一个可调用方法,我可以从 Salesforce 流调用该方法来查询联系人对象并返回一组带有传入(可调用)变量(在本例中为电子邮件地址)的 Id。

public class askFSIS_Match_eMail_ContactIds {
    @InvocableMethod(label='Find Unique Matching eMail Contact Ids'
                    description='Find potential contacts using eMail address as matching field and return a set of Contact Ids.')
    
    public static List<List<String>> getEmailContactIds (List<emIdRequest> emidreq)
    {
        List<Contact> eMailContacts = new List<Contact>();
        
        if(emidreq[0].eMailAddress != null)
        {
            String eMaddress = emidreq[0].eMailAddress;

            eMailContacts = [SELECT Id
                             FROM Contact
                             WHERE Email = :eMaddress
                             AND Inactive__c = false
                             AND Is_Deleted__c = false
                             AND IsDeleted = false
                             AND askFSIS_Contact_Type__c != 'askFSIS Internal'];
        }
            
        Set<Id> eMailContactIdSet = (new Map<Id,Contact>(eMailContacts)).keySet();
        List<Id> eMailContactIds = new List<Id>(eMailContactIdSet);
        
        List<List<Id>> eMailContactIdList = new List<List<Id>>();
        eMailContactIdList.add(eMailContactIds);

        Return eMailContactIdList;
    }    
    
    public class emIdRequest
    {
        @InvocableVariable(label='eMail Address' required=true)
        public String eMailAddress;
    }
}

尽管我永远不知道如何使用命名变量返回它,但它确实有效。

我的问题是创建测试类。代码编译没有问题,但运行测试时失败(日志指示“列表索引超出范围:0”),所以我什至无法确定覆盖范围...

@isTest
public class askFSIS_Match_eMail_ContactIds_Test {
    static testMethod void testGetEmailContactIds() {

    Contact con = new Contact();
    con.FirstName = 'Jack';
    con.LastName = 'Jill';
    con.eMail = '[email protected]';
    insert con;

    List<askFSIS_Match_eMail_ContactIds.emIdRequest> inputparams = new List<askFSIS_Match_eMail_ContactIds.emIdRequest>();
    askFSIS_Match_eMail_ContactIds.emIdRequest pf = new askFSIS_Match_eMail_ContactIds.emIdRequest();
    pf.eMailAddress = '[email protected]';
        
    Test.startTest();
    
        List<List<Id>> contact_jack = askFSIS_Match_eMail_ContactIds.getEmailContactIds(inputparams);
        
    Test.stopTest();
    
    System.assert (contact_jack != null);
        
    }
}

我当然希望它能够运行(通过)并给我 100% 的覆盖率,但我陷入了困境。不可否认,我是 Apex 编程的绝对新手(虽然一般来说不是编程)。

任何帮助将不胜感激!

salesforce apex test-class
1个回答
0
投票

问题出在这行代码:

if(emidreq[0].eMailAddress != null)

发生这种情况是因为您将空的 emidreq 列表传递给该方法。这使我们得出结论,您忘记将测试

askFSIS_Match_eMail_ContactIds.emIdRequest
添加到列表中。

为了解决这个问题,在测试类中,在这些行之后:

List<askFSIS_Match_eMail_ContactIds.emIdRequest> inputparams = new List<askFSIS_Match_eMail_ContactIds.emIdRequest>();
askFSIS_Match_eMail_ContactIds.emIdRequest pf = new askFSIS_Match_eMail_ContactIds.emIdRequest();
pf.eMailAddress = '[email protected]';

添加这行代码:

inputparams.add(pf);
© www.soinside.com 2019 - 2024. All rights reserved.