. У меня есть это очень просто перед триггером вставки/обновления. Возможность, которая автоматически выбирает Ценовую книгу на основе выпадающего значения, содержащего информацию о местоположении 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%. Пожалуйста, предложите исправление для тестовых случаев.
В первом случае ваш триггер смотрит на campus__c, но ваш тест устанавливает office__c – superfell
@superfell Извините, это опечатка здесь. Но код все еще не работает. Какие-либо предложения? –