0

簡単なSalesForceトリガーを作成しました。リードが修飾されなくなったら、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%がカバーされています。

私の間違いはどこにありますか?

4

2 に答える 2

2

テストクラスでは、レコードを挿入するだけですが、トリガーは更新イベントをキャプチャするように設定されているだけです。リードを挿入してから更新してトリガーを実行するか、「挿入時」をトリガーに追加して、リードが挿入および更新されたときに実行されるようにする必要があります。

また、このタイプの更新でbeforeイベントトリガーを使用する必要がある場合は、afterイベントを使用しています。追加のDML操作を実行する必要がなくなります。

于 2012-07-17T13:45:59.040 に答える
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();
    }
}
于 2012-07-18T06:04:41.573 に答える