货币转换触发器写作测试课

问题描述 投票:0回答:1

我在为这个触发器编写一个将记录货币转换为组织货币的测试类时几乎不需要任何帮助。任何人都可以协助/指导吗?请。

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);
        }
    }
}
triggers salesforce apex test-class
1个回答
0
投票
@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. 断言触发器生成了期望的结果
© www.soinside.com 2019 - 2024. All rights reserved.