【问题标题】:What is wrong in my Salesforce Trigger Test Class?我的 Salesforce 触发器测试类有什么问题?
【发布时间】:2012-07-16 10:17:15
【问题描述】:

我编写了一个简单的销售队伍触发器。一旦潜在客户变得不合格,我想将 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% 覆盖。

我的错误在哪里?

【问题讨论】:

    标签: triggers salesforce apex-code


    【解决方案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();
        }
    }
    

    【讨论】:

      【解决方案2】:

      在您的测试类中,您只是插入记录,但您的触发器仅设置为捕获更新事件。您要么需要插入线索然后更新以执行触发器,要么将“插入时”添加到触发器中,以便在插入和更新线索时运行。

      此外,当您应该使用前事件触发器进行此类更新时,您正在使用后事件。无需执行额外的 DML 操作。

      【讨论】:

      • 谢谢,确实通过了验证。我把它改成了更新前的。
      猜你喜欢
      • 2018-08-17
      • 2013-07-05
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 2010-12-16
      • 2020-12-22
      相关资源
      最近更新 更多