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 以获得正确的值。
我正在使用 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 以获得正确的值。