【问题标题】:Salesforce deploy Apex Class to production 0% code coverageSalesforce 将 Apex 类部署到生产环境 0% 的代码覆盖率
【发布时间】:2019-05-23 17:10:42
【问题描述】:

我正在使用 Salesforce,我想从我的沙盒中部署一个自定义 Apex 类。在生产中没有 Apex 类,估计代码覆盖率为 0%,所以当我尝试部署我的类时,我收到以下错误

有没有办法部署我的班级?

我要部署的类在这里:

Public class AutoConvertLeads
{
    @InvocableMethod
    public static void LeadAssign(List<Id> LeadIds)
    {

        List<Database.LeadConvert> MassLeadconvert = new List<Database.LeadConvert>();
        for(id currentlead: LeadIds){
                Database.LeadConvert Leadconvert = new Database.LeadConvert();
                Leadconvert.setLeadId(currentlead);                
                Leadconvert.setConvertedStatus('Qualified');
                MassLeadconvert.add(Leadconvert);
        }


        if (!MassLeadconvert.isEmpty()) {
            List<Database.LeadConvertResult> lcr = Database.convertLead(MassLeadconvert);
        }
    }
}

测试类:

@isTest
Private class UnitTest_AutoConvert 
{
    Static TestMethod void AutoConvert()
    {
        // Create the Lead object
        Lead testLead = new Lead(
            FirstName='Demo 100800',
            LastName = 'Demo 100800 UnitTest',
            Status='Qualified',
            company='Lacosta'
        );
        insert  testLead;

        test.StartTest();
        List<Lead> lstOfLeadids = [ testLead.Id ]
        AutoConvertLeads.LeadAssign(lstOfLeadIds)

        test.stopTest();
    }
}

【问题讨论】:

    标签: salesforce apex apex-code


    【解决方案1】:

    为了满足生产部署要求,您必须满足测试要求。在基本层面上,这意味着您必须在生产代码和测试类之间保持 75% 的行覆盖率。这是在聚合级别 - 因此您可以拥有一些覆盖率或多或少的 Apex 类,但它必须占所有代码的 75%。此外,所有 Apex 触发器都需要至少 1 行测试覆盖才能通过测试。

    很遗憾,您在问题中提供的信息有限。如果您可以为您的测试类提供代码,这将很有帮助,这样我们就可以确定 Salesforce 在部署期间没有执行您的测试的原因。我最初的猜测是你没有正确地装饰你的测试类,让 Salesforce知道它是一个测试类。

    如果您想对测试进行友好的介绍,请尝试测试 Trailhead:https://trailhead.salesforce.com/en/content/learn/modules/apex_testing

    按照 Svatopluk 的建议查看文档。具体确保发生以下情况:

    1) 测试类标记为“@isTest”

    2) 类内的测试方法在声明中标记为“@isTest”或“testMethod”。

    3) 测试类实际上在您的目标类中实例化并运行代码。

    4) 在同一变更集中部署 TargetClass 和 TestClass - 这样 Salesforce 就可以在部署期间实际执行测试。

    这是一个示例块:

    @isTest
    public class TestTargetClass{
    
        public static testMethod void TestExectuableMethod() {     
            Test.startTest();
            TargetClass instance_tc = new TargetClass();
            instance_tc.executable_method();
            Test.stopTest();
            System.assert(<some sort of test to confirm that your TargetClass operates correctly>);
        }
    }
    

    根据发布的测试代码进行编辑:

    您的测试代码存在许多问题。 首先,它无法编译,所以我不确定您是如何通过测试的。

    让我们查看以下块中的错误:

        test.StartTest();
        List<Lead> lstOfLeadids = [ testLead.Id ]
        AutoConvertLeads.LeadAssign(lstOfLeadIds)
        test.stopTest();
    

    第二行 lstOfLeadids 的类型是潜在客户列表,但您尝试使用 Id 而不是潜在客户填充它。 这需要是一个 Id 列表,因为 AutoConvertLeads.LeadAssign 将一个 Id 列表作为参数。

    您对 lstOfLeadids 的实例化也是错误的。

    您缺少两个分号。

    请使用以下代码:

        test.StartTest();
        List<Id> lstOfLeadids = new List<Id>{ testLead.Id };
        AutoConvertLeads.LeadAssign(lstOfLeadIds);
        test.stopTest();
    

    在您的实际 AutoConvertLeads 课程中,您将潜在客户转换状态设置为“合格”。这在我的 Sandbox 上不起作用,但也许在你的 Sandbox 上会起作用。您应该在 IsConverted 记录的 LeadStatus 对象上查询 MasterLabel 以获得正确的值。

    【讨论】:

    • 我添加了我要部署的类的代码。你能帮我上测试课吗?
    • 当然,你说你还写了一个测试类——你能不能也把它贴出来。如果您还没有编写测试类,请阅读文档并尝试编写自己的。如果您有困难,我很乐意帮助您调试。
    • 我发布了我的测试课
    【解决方案2】:

    您需要将测试类写入您的类,以便能够将其移至生产环境。

    你可以找到基本解释here

    【讨论】:

    • 我已经编写了 1 个测试函数并尝试使用 Apex 类部署它,但仍然无法部署它,因为代码覆盖率为 0%。顺便提一下,我的 Apex 类通过了我创建的测试类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多