Написание тестового класса для триггера конвертации валюты

Мне нужна небольшая помощь в написании тестового класса для этого триггера, который преобразует валюту записи в валюту организации. Может ли кто-нибудь помочь/направить? Пожалуйста.

trigger convertToEuro on CustomObject(before update) { 

List<CurrencyType> currencyTypeList = [select id,IsoCode,ConversionRate from CurrencyType where isActive = true] ;

Map<String , Decimal> isoWithRateMap = new Map<String, Decimal>();

for(CurrencyType c : currencyTypeList) {

    isoWithRateMap.put(c.IsoCode , c.ConversionRate) ;

}

for(CustomObject ce: trigger.new){

    if(ce.CurrencyIsoCode != 'EUR' && isoWithRateMap.containsKey(ce.CurrencyIsoCode)){

        ce.Amount_Converted__c = ce.ffps_iv__Amount__c/ isoWithRateMap.get(ce.CurrencyIsoCode);

    }

}

}


person khosla    schedule 25.01.2018    source источник


Ответы (1)


@isTest(seealldata=false)
public class testConvertToEuro{
   @testSetup
   static void setupTest(){
       List<CurrencyType> liCT = New List<CurrencyType>();
       List<CustomObject> liCO = New List<CustomObject>();
       Integer iCounter = 0;
       liCT.add(new CurrencyType(IsoCode='EUR',ConversionRate=1,isActive=TRUE));
       liCT.add(new CurrencyType(IsoCode='USD',ConversionRate=2,isActive=TRUE));
       liCT.add(new CurrencyType(IsoCode='XXX',ConversionRate=3,isActive=TRUE));
       liCT.add(new CurrencyType(IsoCode='YYY',ConversionRate=4,isActive=TRUE));
       liCT.add(new CurrencyType(IsoCode='ZZZ',ConversionRate=5,isActive=TRUE));
       for(Integer i=0; i<251; i++){
            CustomObject co = New CustomObject(
               CurrencyIsoCode = liCT[iCounter].IsoCode;
               ffps_iv__Amount__c = liCT[iCounter].ConversionRate + .01;
            );

           if(iCounter < liCT.size() -1){
               iCounter += 1;
           }
           else{
               iCounter = 0;
           }
        }
       insert liCT;
       insert liCO;
   }
   static testmethod void runTest(){
       setupTest();
       List<CustomObject> liCustomObjectsToUpdate = New List<CustomObject>();
       for(CustomObject co : [SELECT Id, ffps_iv__Amount__c, Amount_Converted__c from CustomObject]){
           co.ffps_iv__Amount__c -= .01;
           liCustomObjectsToUpdate.add(co);
       }
       test.startTest();
       Update liCustomObjectsToUpdate;
       test.stopTest();
       System.assertEquals([SELECT Id, Amount_Converted__c FROM CustomObject LIMIT 1][0].Amount_Converted__c, 1);
   }
}   

Я не могу протестировать этот код без добавления вашего пользовательского объекта, поэтому в нем могут быть ошибки. Пожалуйста, дайте мне знать, какие ошибки вы получаете. Если вам нужна помощь в отладке, вы должны предоставить точный используемый код и точное сообщение об ошибке.

Он следует основному шаблону для тестирования триггеров обновления:

  1. Вставить тестовые данные
  2. Получить тестовые данные
  3. Обновить записи
  4. Утверждают, что триггер сгенерировал желаемый результат
person TechingCrewMatt    schedule 26.01.2018