我正在使用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();
}
}
答案 0 :(得分:1)
您需要将测试班级写到您的班级才能将其移至生产环境。
您可以找到基本的说明here
答案 1 :(得分: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是Lead类型列表,但是您尝试使用ID而不是Lead填充它。 由于AutoConvertLeads.LeadAssign需要使用一个ID列表作为参数,因此它必须是一个ID列表。
您对lstOfLeadids的实例化也是错误的。
您缺少两个分号。
请使用以下代码:
test.StartTest();
List<Id> lstOfLeadids = new List<Id>{ testLead.Id };
AutoConvertLeads.LeadAssign(lstOfLeadIds);
test.stopTest();
在您实际的AutoConvertLeads类中,您将潜在顾客的状态设置为“合格”。这在我的沙盒上不起作用,但也许会在您的沙盒上起作用。您应该在IsConverted记录的LeadStatus对象上查询MasterLabel,以获取正确的值。