【问题标题】:Trigger works but test doesn't cover 75% of the code触发器有效,但测试未覆盖 75% 的代码
【发布时间】:2014-08-08 10:47:49
【问题描述】:

我有一个在沙盒中工作的触发器。工作流检查活动级别中的字段并将其与自定义设置进行比较。如果匹配,则将目标返回到 DS 乘数字段。触发器如下所示

trigger PopulateTarget on Campaign (before insert, before update) 
{
for(Campaign campaign : Trigger.new)
{
    if (String.isNotBlank(campaign.Apex_Calculator__c) == true)
    {
        DSTargets__c targetInstance = DSTargets__c.getInstance(campaign.Apex_Calculator__c);
        {
            String target = targetInstance .Target__c;
             campaign.DS_Target_Multiplier__c = Target;
        }
    }
}
}

但是,我无法为此编写适当的测试,并在互联网上寻求帮助。我收到了测试

@isTest
private class testPopulateTarget{
static testMethod void testMethod1(){

      // Load the Custom Settings
      DSTargets__c testSetting = new DSTargets__c(Name='Africa - 10 Weeks; CW 10',Target__c='0.1538', SetupOwnerId = apexCalculatorUserId);
      insert testSetting;


       // Create Campaign. Since it would execute trigger, put it in start and stoptests
       Test.startTest();
           Campaign testCamp = new Campaign();
           // populate all reqd. fields.
           testCamp.Name = 'test DS campaign';
           testCamp.RecordTypeId = '012200000001b3v';
           testCamp.Started_Campaign_weeks_before_Event__c = '12 Weeks';
           testCamp.ParentId= '701g0000000EZRk';


           insert testCamp;
       Test.stopTest();
       testCamp = [Select ID,Apex_Calculator__c,DS_Target_Multiplier__c from Campaign where Id = :testCamp.Id];
       system.assertEquals(testCamp.DS_Target_Multiplier__c,testSetting.Target__c);// assert that target is populated right

}

}

此类测试返回错误“编译错误:变量不存在:apexCalculatorUserId 在第 6 行第 122 列”。如果我删除 ApexCalculator 部分 System.assertEquals 则测试通过。但是它涵盖了代码的 4/6 部分(即 66%)

谁能帮助我如何修改代码以使覆盖率达到 75%?

【问题讨论】:

    标签: triggers salesforce apex


    【解决方案1】:

    是的,尚未定义 apexCalculatorUserId。您获得的代码似乎不完整。您需要查看构造函数 DSTargets__c 并查看它期望的 ID 类型。

    猜测一下,您可以尝试 UserInfo.getUserId() 来获取当前用户的 ID,但这可能不是构造函数中预期的 ID。值得一试,看看测试覆盖率是否有所提高。

    【讨论】:

    • 我添加了 UserInfo.getUserId() 但随后它生成错误“System.DmlException:插入失败。第 0 行的第一个异常;第一个错误:FIELD_INTEGRITY_EXCEPTION,字段完整性异常:SetupOwnerId(id 值不正确类型):[SetupOwnerId]”。顶点生成器是一个公式字段,它带来事件区域、事件前几周和当前周等值。这些值与 DS 目标自定义设置中的值完全相同。当您说我需要查看构造函数时,您的意思是 DS Targets 自定义设置中的字段,我在哪里有值?
    【解决方案2】:

    1) 将 apexCalculatorUserId 替换为 UserInfo.getUserId() 2) 我不确定广告系列中的 Apex_Calculator__c 是什么类型的字段。如果它不是您想在“插入 testCamp”之前插入新行的公式。就像是: testCamp.Apex_Calculator__c = UserInfo.getUserId();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2016-01-12
      • 2019-07-20
      相关资源
      最近更新 更多