我的Salesforce Trigger测试类有什么问题?

时间:2012-07-17 13:20:56

标签: triggers salesforce apex-code

我写了一个简单的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%已覆盖。

我的错误在哪里?

2 个答案:

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