【问题标题】:Salesforce Code Coverage Failure. Your code coverage is 12%. You need at least 75% coverage to complete this deploymentSalesforce 代码覆盖率失败。您的代码覆盖率为 12%。您需要至少 75% 的覆盖率才能完成此部署
【发布时间】:2021-05-10 07:55:54
【问题描述】:

我想将我的代码部署到生产环境。在这个 apex 代码中,我正在调用第三方 api 以获取点击按钮的机会,该按钮会从 VF 页面触发 doSomething()。我想解决此问题并将以下代码推送到我的生产帐户。 这是我的顶级课程代码

{
    private ApexPages.StandardController standardController;
 
    public DetailButtonController(ApexPages.StandardController standardController)
    {
         
        this.standardController = standardController;
    }
 
    public PageReference doSomething()
    {
        // Apex code for handling record from a Detail page goes here
        Id recordId = standardController.getId();
        Opportunity record = (Opportunity) standardController.getRecord();
        
        HttpRequest req = new HttpRequest();
    HttpResponse res = new HttpResponse();
    Http http = new Http();
    req.setEndpoint('https://mergeasy.com/merge_file');
    req.setMethod('POST');
    
    //function to Convert date to mm/dd/yyy
    Date dToday = record.Closing_Date__c;
    String clos_date =  'On or before ' + dToday.month() + '/' + dToday.day() + '/' + dToday.year();
    
    Date dAcc = record.Offer_Acceptance_Date__c;
    String acc_date = dAcc.month() + '/' + dAcc.day() + '/' + dAcc.year();
    
    String str1 = '' + record.Purchase_Price__c ;
    String f_p_price = str1.SubStringBefore('.');
    
    String str2 = '' + record.Escrow_Deposit__c ;
    String e_d_price = str2.SubStringBefore('.');
    
    String str3 = '' + record.Balance__c ;
    String b_price = str3.SubStringBefore('.'); 
      
    
    if(record.Second_Seller_Name_Phone__c==null && record.Second_Seller_Email__c==null && record.Name!=null && record.Company_Profile__c!=null){
        req.setBody('seller_name='+record.Name+'&buyer_name='+record.Company_Profile__c+'&county='+record.County_Contract__c+'&street_address='+record.Left_Main__Address_1__c+'&p_price='+f_p_price+'&escrow_deposit='+e_d_price+'&title_agent='+record.Escrow_Agent_Name__c+'&title_address='+record.Escrow_Address__c+'&title_phone='+record.Escrow_Number__c+'&balance='+b_price+'&accept_date='+acc_date+'&closing_date='+clos_date+'&inspection_days='+record.Inspection_Days__c+'&special_clause='+record.Special_Clauses__c+'&doc_id=XXXXXXXXXX&doc_name=Contract.pdf&delivery_method=docusign&sign_order=true&recipient1_email='+record.Email__c+'&recipient1_name='+record.Name+'&recipient2_name='+record.Company_Profile__c+'&recipient2_email=developer.c2c@gmail.com&docusign_doc_name=Contract - Attorney Involved&email_subject=Contract:'+record.Left_Main__Address_1__c+'&email_body=Hi please sign the attached contract');
    }
    
    else if(record.Second_Seller_Name_Phone__c!=null && record.Second_Seller_Email__c!=null && record.Name!=null && record.Company_Profile__c!=null){
        String name = record.Name + ' and ' + record.Second_Seller_Name_Phone__c ;
        req.setBody('seller_name='+name+'&buyer_ame='+record.Company_Profile__c+'&county='+record.County_Contract__c+'&street_address='+record.Left_Main__Address_1__c+'&p_price='+f_p_price+'&escrow_deposit='+e_d_price+'&title_agent='+record.Escrow_Agent_Name__c+'&title_address='+record.Escrow_Address__c+'&title_phone='+record.Escrow_Number__c+'&balance='+b_price+'&accept_date='+acc_date+'&closing_date='+clos_date+'&inspection_days='+record.Inspection_Days__c+'&special_clause='+record.Special_Clauses__c+'&doc_id=XXXXXXXXXX&doc_name=Contract.pdf&delivery_method=docusign&sign_order=true&recipient1_email='+record.Email__c+'&recipient1_name='+record.Name+'&recipient2_name='+record.Second_Seller_Name_Phone__c+'&recipient2_email='+record.Second_Seller_Email__c+'&recipient3_email=developer.c2c@gmail.com&recipient3_name='+record.Company_Profile__c+'&docusign_doc_name=Contract - Normal(1S1B).pdf&email_subject=Contract:'+record.Left_Main__Address_1__c+'&email_body=Hi please sign the attached contract');
    }
    
    req.setHeader('Authorization', 'Bearer XXXXXXXXXXXXXX'); 
 try {
        res = http.send(req);
    } catch(System.CalloutException e) {
        System.debug('Callout error: '+ e);
        System.debug(res.toString());
    }
        return null;
 
    }
} 

这是测试类,它显示了 90% 的代码覆盖率。

//testClasst.apxc
@isTest
public class testClassBt {
    @isTest 
    static void testPostCallout() {
               
        System.Test.setMock(HttpCalloutMock.class, new TestClass());
         Opportunity opp = new Opportunity();
          opp.Name='Rickson Developer';
          opp.StageName='Underwrite';
          opp.CloseDate= date.newInstance(1991, 2, 21);
          opp.Closing_Date__c= date.newInstance(1991, 2, 21);
          opp.Offer_Acceptance_Date__c =date.newInstance(1991, 2, 21);
          opp.Purchase_Price__c = 1200.00;
          opp.Escrow_Deposit__c= 1200.00;
          opp.Company_Profile__c='RFTA Properties, LLC';
          opp.County_Contract__c='Orange';
          opp.Left_Main__Address_1__c='123 Main Street';
          opp.Escrow_Agent_Name__c='Test Agent';
          opp.Escrow_Address__c='123 Main street';
          opp.Escrow_Number__c='9892132382';
          opp.Inspection_Days__c=34;
          opp.Special_Clauses__c='Test';
         insert opp;
         ApexPages.StandardController standardController = new ApexPages.StandardController(opp);
        DetailButtonController strResp = new DetailButtonController(standardController);

        strResp.doSomething();
    }
}

//TestClass.apxc

@isTest
global class TestClass implements HttpCalloutMock {
    global HTTPResponse respond(HTTPRequest request) {
        HttpResponse response = new HttpResponse();
        response.setHeader('Content-Type', 'application/json');
        response.setBody('{"animal": {"id":1, "name":"Tiger"}}');
        response.setStatusCode(200);
        return response;
    }
}

【问题讨论】:

    标签: salesforce code-coverage apex salesforce-development salesforce-developer


    【解决方案1】:

    假设在验证过程中您只运行这个类的测试方法,您是否尝试先在 Sandbox 中运行您的测试类?

    某些 IDE 和 Salesforce 开发人员控制台本身会在单元测试执行后向您显示覆盖的行。 只需按照绿线调试代码并了解异常发生的位置即可。

    如果您也可以发布测试课程,我们可以为您提供更多帮助。

    【讨论】:

    • 我已经更新了测试类代码,请检查并告诉我实际代码中有什么问题,以便我修复它。
    • 您是否尝试使用变更集部署类? Mock 类和 Test 类都在 Change Set 中吗?
    • 我尝试了测试类和没有测试类?当我部署主文件时,我得到了 9-10 的代码覆盖率,并且对于两个测试类,我的验证都失败了,覆盖率为 0%。
    • 当你得到 0% 是因为测试方法失败。这意味着抛出了一个异常,而不是在“res = http.send(req)”这一行,因为它在 try/catch 中。之前已经抛出异常。尝试插入一些 system.debug() 语句来调试您的代码。从您的生产环境设置中也插入一个 Salesforce 调试日志,看看发生了什么。您需要了解异常的错误消息是什么。如果测试类在沙盒中工作,那么您在 Prod 中缺少一些东西。可能是 customSetting 或 MDT(如果您在类中引用它们)
    • 您是否查看过您的沙盒中是否存在潜在的机会验证规则?
    猜你喜欢
    • 2020-07-28
    • 1970-01-01
    • 2018-01-11
    • 2012-06-30
    • 2017-05-31
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多