2012-07-17 44 views
0

我寫了一個簡單的SalesForce觸發器。一旦領導變得不合格,我想將IsUnreadbyOwner字段更新爲False(這發生在我們的用戶將隊列中的領先者離開時)。我的Salesforce觸發器測試類有什麼問題?

我的觸發是:

trigger UnqualifiedLead on Lead (after 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 = 'Unqualified'; 
     lead.IsUnreadByOwner = True; 
     insert lead; 
    } 
} 

不過,我得到一個覆蓋誤差:0%覆蓋。

我的錯誤在哪裏?

回答

2

在您的測試課程中,您只是插入記錄,但您的觸發器僅設置爲捕獲更新事件。您將需要插入導線,然後更新以執行觸發器,或在觸發器上添加「插入」,以便在插入導線並更新導線時運行。

此外,您正在使用after事件時,應該使用before事件觸發器進行此類更新。節省必須執行額外的DML操作。

+0

謝謝你,這並通過驗證。我更改之前更新。 – Saariko 2012-07-17 14:50:15

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