我写了一个简单的SalesForce Trigger。一旦潜在客户变得不合格,我想将IsUnreadbyOwner字段更新为False(这是因为我们的用户将潜在客户留在队列中)。
我的触发器是:
trigger UnqualifiedLead on Lead (after update) {
for(Lead lead: Trigger.new)
{
if (lead.Status == 'Unqualified')
{
lead.IsUnreadByOwner = False;
}
}
}
我的测试课,AFAIK应该是这样的:
@isTest
private class UnqualifiedLeadTest {
static testMethod void myUnitTest() {
// Setup the lead record
Lead lead = new Lead();
lead.LastName = 'last';
lead.FirstName = 'First';
lead.Company = 'Company';
lead.Status = 'Unqualified';
lead.IsUnreadByOwner = True;
insert lead;
}
}
但是,我收到了覆盖率错误:0%已覆盖。
我的错误在哪里?
答案 0 :(得分:2)
在您的测试类中,您只是插入记录,但您的触发器仅设置为捕获更新事件。您需要插入线索然后更新以执行触发器或在触发器上添加“on insert”,以便在插入和更新线索时运行。
此外,当您使用事件前触发器进行此类更新时,您正在使用after事件。节省了必须执行额外的DML操作。
答案 1 :(得分:1)
同样重要的是要注意你的单元测试实际上甚至没有测试任何东西。您的代码应如下所示:
trigger UnqualifiedLead on Lead (before update)
{
for(Lead lead: Trigger.new)
{
if (lead.Status == 'Unqualified')
{
lead.IsUnreadByOwner = False;
}
}
}
测试类:
@isTest
private class UnqualifiedLeadTest
{
static testMethod void myUnitTest()
{
// Setup the lead record
Lead lead = new Lead();
lead.LastName = 'last';
lead.FirstName = 'First';
lead.Company = 'Company';
lead.Status = 'NewStatus';
lead.IsUnreadByOwner = True;
insert lead;
test.startTest();
lead.Status = 'Unqualified';
update lead;
Lead lTest = [SELECT Id, IsUnreadByOwner FROM Lead WHERE Id=:lead.Id];
system.assertEquals(false, lTest.IsUnreadByOwner);
test.stopTest();
}
}