Salesforce 将 Apex Class 部署到生产 0% 代码覆盖率

Salesforce deploy Apex Class to production 0% code coverage

我正在使用 Salesforce,我想从我的沙盒中部署自定义 Apex Class。在生产环境中,没有 Apex Classes,估计代码覆盖率为 0%,所以当我尝试部署我的 class 时,出现以下错误

有没有办法部署我的 class?

我要部署的Class在这里:

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);
        }
    }
}

测试Class:

@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();
    }
}

您需要将测试 class 写入您的 class 才能将其投入生产。

你可以找到基本的解释here

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

很遗憾,您在问题中提供的信息有限。如果您可以提供测试代码 class 将会很有帮助,这样我们就可以确定为什么 Salesforce 在部署期间不执行您的测试。我最初的猜测是您没有为 Salesforce 知道 正确修饰测试 class 这是一个测试 class.

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

按照 Svatopluk 的建议查看文档。特别要确保发生以下事情:

1) 测试 class 被标记为“@isTest”

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

3) 测试 class 实际上在您的目标 class.

中实例化并运行代码

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 是 Lead 的类型列表,但您试图用 ID 而不是 Lead 来填充它。 这需要是一个 Id 列表,因为 AutoConvertLeads.LeadAssign 将一个 Id 列表作为参数。

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

你少了两个分号。

请使用以下代码:

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

在您的实际 AutoConvertLeads class 中,您将潜在客户转化状态设置为 "Qualified"。这在我的 Sandbox 上不起作用,但也许它会在您的沙盒上起作用。您应该在 IsConverted 记录的 LeadStatus 对象上查询 MasterLabel 以获得正确的值。