当前位置: 首页 > 知识库问答 >
问题:

Salesforce将Apex类部署到生产中,代码覆盖率为0%

柯良骏
2023-03-14

我正在使用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();
    }
}

共有2个答案

西门旻
2023-03-14

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

你可以在这里找到基本的解释

章昱
2023-03-14

为了满足生产部署要求,您必须满足测试要求。在基本级别上,这意味着您必须在生产代码和测试类之间保持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是Type List of铅,但您试图用Id而不是铅填充它。这需要是自AutoConvertLeads以来的Id列表。LeadAssign将Ids列表作为参数。

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

您缺少两个分号。

请使用以下代码:

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

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

 类似资料:
  • 我对Apex很陌生。。一天过去了,我为我的失礼感到非常抱歉。我要做的是返回我的帐户列表,然后查看帐户的合同日期(contract\u Expiration\uu c)。根据该日期,应将自定义字段(update\u active\u status\u text\uu c)更新为null、active或Void。 我没有得到任何错误,但我没有得到任何代码覆盖率。任何帮助都将大有裨益。 提前感谢 顶点类

  • 这是一个重要的可量化指标,如果代码覆盖率很高,你就可以放心的修改代码,在发版本的时候也能睡个安稳觉。否则就是拆东墙补西墙,陷入无尽的 bug 诅咒中。 那么在 OpenResty 里面如何看到代码覆盖率呢?其实很简单,使用 LuaCov 可以很方便的实现。 我们先了解下 LuaCov,这是一个针对 Lua 脚本的代码覆盖率工具,通过 luarocks 来安装: luarocks install l

  • 问题是当我们开发顶点代码,然后我们编写测试类,它至少覆盖顶点类75%的代码覆盖率,现在当我登录到开发人员控制台时,我能够看到代码覆盖率很少,因为手动需要去开发人员控制台,我想要一些可以向高级经理展示的关于整个组织的Salesforce Test代码覆盖率的报告 但是有没有可能在一个非常类似于sonarqube代码覆盖率报告的复杂报告中得到这个 提前谢谢卡洛琳

  • 我在声纳中的代码覆盖率显示为0%,这不是真的,因为我有单元测试。 格拉德尔 当我打开inside然后我可以看到成功的单元测试。 我在Jenkins环境中运行作为

  • Jacoco插件在jenkins报告中显示0%的覆盖率,但当我在本地系统中运行相同的命令时,Jacoco会正确生成报告。我正在使用以下命令: mvn-s xyz/settings.xml-f xyz/xyz/pom.xml清洁安装org.jacoco 所以当我在jenkins中运行这个命令时,它会生成错误的报告。我已经检查了它在工作区目录对应的项目在詹金斯。它显示每个项目的0%覆盖率。但是当我在本

  • 我的代码运行在具有单独JVM的单独虚拟机上。我想在此虚拟机上以tcpserver模式设置JaCoCo代理以收集覆盖率数据。然后,我将在我的maven项目中以tcpclient模式设置JaCoCo代理,以连接到上面提到的VM并获取覆盖率数据。 问题是代理不收集任何覆盖数据。在中创建了覆盖率数据文件,但该文件为空。 下面是代理选项:-Java agent:/usr/xx/plugins/org . j