2013-10-10 2 views
0
.

. У меня есть это очень просто перед триггером вставки/обновления. Возможность, которая автоматически выбирает Ценовую книгу на основе выпадающего значения, содержащего информацию о местоположении Sales Office (State).Тестирование покрытия не выполняется перед вставкой/перед обновлением. Триггер Apex.

Вот мой Trigger:

trigger SelectPriceBook on Opportunity (before insert, before update) { 

    for(Opportunity opp : Trigger.new) { 
     // Change Price Book 
     // New York 
     if(opp.Campus__c == 'NYC') 
      opp.Pricebook2Id = PB_NYC; // contains a Pricebook's ID 

     // Atlanta 
     if(opp.Campus__c == 'ATL') 
      opp.Pricebook2Id = PB_ATL; // contains another Pricebook's ID 
    } 
} 

Вот мой тест Класс:

@isTest (SeeAllData = true) 
public class SelectPriceBookTestClass { 

    static testMethod void validateSelectPriceBook() { 

     // Pricebook IDs 
     ID PB_NYC = 'xxxx'; 
     ID PB_ATL = 'xxxx'; 

     // New Opp 
     Opportunity opp = new Opportunity(); 
     opp.Name = 'Test Opp'; 
     opp.Office__c = 'NYC'; 
     opp.StageName = 'Quote';  

     // Insert 
     insert opp; 

     // Retrive inserted opportunity 
     opp = [SELECT Pricebook2id FROM Opportunity WHERE Id =:opp.Id]; 
     System.debug('Retrieved Pricebook Id: ' + opp.Pricebook2Id); 

     // Change Campus 
     opp.Office__c = 'ATL'; 
     // Update Opportunity 
     update opp; 

     // Retrive updated opportunity 
     opp = [SELECT Pricebook2id FROM Opportunity WHERE Id =:opp.Id]; 
     System.debug('Retrieved Updated Pricebook Id: ' + opp.Pricebook2Id);   

     // Test 
     System.assertEquals(PB_ATL, opp.Pricebook2Id); 

    } 
} 

Трассы испытаний сообщают покрытие тест 0%.

Кроме того, на аналогичных строках у меня есть еще один триггер insert, который устанавливает Владельца события так же, как Владелец родительского свитка. Вот код:

trigger AutoCampusTourOwner on Event(before insert) { 

    for(Event evt : Trigger.new) { 
     // Abort if other kind of Event 
     if(evt.Subject != 'Visit') 
      return;   

     // Set Owner Id 
     Lead parentLead = [SELECT OwnerId FROM Lead WHERE Id = :evt.WhoId]; 
     evt.OwnerId = parentLead.OwnerId; 

    } 
} 

Это тоже является причиной 0% охват - я думаю, что это что-то делать с для петель в обоих есть. Я знаю, что серьезно нарушаю правила DML, вызывая SOQL-запрос внутри цикла for, но для моих целей это должно быть хорошо, поскольку эти события создаются вручную и только по одному - поэтому нет ограничений на использование ограничений для правителей для объемных вставок.

Код в обоих случаях работает 100%. Пожалуйста, предложите исправление для тестовых случаев.

+0

В первом случае ваш триггер смотрит на campus__c, но ваш тест устанавливает office__c – superfell

+0

@superfell Извините, это опечатка здесь. Но код все еще не работает. Какие-либо предложения? –

ответ

0

Вы пробовали trigger.old ?? Я думаю, что когда вы обновляете офис в своем тестовом классе от NYC до ATL, значение «NYC» будет находиться в trigger.old, и именно это вы хотите проверить в своем триггере. Я мог ошибаться, так как я тоже новичок на вершине, но попробуйте и дайте мне знать, что произойдет.

0

Для первого триггера ничего не делайте, а просто создавайте возможность и выполняйте вот так.

класс Тест для SelectPriceBook

@isTest 
    private class TriggerTestClass { 

     static testmethod void selectPriceTest(){ 
      Opportunity opps = new Opportunity(
       Name= 'Test Opps', 
       CloseDate = System.today().addDays(30), 
       StageName = 'Prospecting', 
       ForecastCategoryName = 'Pipeline', 
       Office__c = 'NYC'); 
       insert opps; 

       Opportunity opps2 = new Opportunity(
       Name= 'Test Opps 2', 
       CloseDate = System.today().addDays(28), 
       StageName = 'Prospecting', 
       ForecastCategoryName = 'Pipeline', 
       Office__c = 'ATL'); 
       insert opps2; 
     } 

    } 

Это даст вам хорошее тестовое покрытие, и я не знаю, что вы пытаетесь сделать в AutoCampusTourOwner!

Смежные вопросы