当前位置: 首页 > 知识库问答 >
问题:

用于简单触发器的Salesforce APEX测试类

拓拔嘉颖
2023-03-14

我已经为此发疯了。我的IF循环中没有任何东西通过我的测试类触发,我不知道为什么。我在网上阅读了很多,看起来我做的事情是正确的,但它仍然没有解决我的代码覆盖率。这是运行的最后一行:如果(isIn==True){
之后我无法让任何东西在IF循环中运行,我已经颠倒了逻辑,它仍然无法运行。我觉得当有人指出它时,我会踢自己,但这是我的代码:

trigger caseCreatedDurringBusinessHours on Case (after insert) {

//Create list and map for cases
List<case> casesToUpdate = new List<case>();
Map<Id, case> caseMap = new Map<Id, case>();

// Get the default business hours
BusinessHours bh = [SELECT Id FROM BusinessHours WHERE IsDefault=true];

// Create Datetime on for now in the local timezone.
    Datetime targetTime =System.now();

// Find whether the time now is within the default business hours
Boolean isWithin;
    if ( Test.isRunningTest() ){
        Boolean isWithin = True;
    }
    else{
        Boolean isWithin = BusinessHours.isWithin(bh.id, targetTime); 
    }

// Update cases being inserted if during business hours
If (isWithin == True){

    // Add cases to map if not null
    For(case newcase : trigger.new) {
        if(newcase.id != null){
            caseMap.put(newcase.Id, newcase);
        }
    }

    // Check that cases are in the map before SOQL query and update
    If(caseMap.size() > 0){

        // Query cases
        casesToUpdate = [SELECT Id, Created_During_Business_Hours__c FROM case WHERE Id IN: caseMap.keySet()];

        // Assign new value for checkbox field
        for (case c: casesToUpdate){
                c.Created_During_Business_Hours__c = TRUE;
        }

        // if the list of cases isnt empty, update them
        if (casesToUpdate.size() > 0)
        {
            update casesToUpdate;
        }

    }


}   

}

这是我的测试类:

@isTest
private class BusinessHoursTest {

@isTest static void createCaseNotInBusinessHours() {
    case c = new case();
    c.subject = 'Test Subject';
    insert c;

}

}

共有2个答案

施选
2023-03-14

我相信您现在已经弄清楚了这一点,但是这个代码块正在重新定义if/ett块内的isIn变量:

Boolean isWithin;

if (Test.isRunningTest()) {
    Boolean isWithin = True;
} else {
    Boolean isWithin = BusinessHours.isWithin(bh.id, targetTime); 
}

这需要:

Boolean isWithin;

if (Test.isRunningTest()) {
    isWithin = True;
} else {
    isWithin = BusinessHours.isWithin(bh.id, targetTime); 
}

或者更确切地说,三元运算符用于最干净的代码:

Boolean isWithin = !Test.isRunningTest() ? BusinessHours.isWithin(bh.id, targetTime) : true;
贺宜修
2023-03-14

我认为您可以将主逻辑复制到顶点类,然后从顶点触发器调用顶点类的方法。

因此,它将使编写测试类变得更加容易。

如果你在这方面需要更多帮助,请告诉我。

 类似资料:
  • 下面是我的顶点触发器。我是一名初学者,正在尝试编写其测试类,但不断出现错误“System.DmlException:Insert失败。第0行出现第一个异常;第一个错误:REQUIRED\u FIELD\u MISSING,错误:只有在产品相关列表上为此opportunity选择了价格手册,才能选择产品。:[]”。 在Opportunity上触发TrgrOptyHighestCustmorePric

  • 大家好, 我正在尝试为我帮助编写的触发器编写一个测试类。触发器使用名为trigger\u help\u c的字段,该字段是通过添加opportunity Type和Account ID派生的公式字段,如果在过去90天内已在该帐户上创建了该类型的opportunity,则在插入之前激发。除非配置文件是系统管理员。这是我的触发器: 我在写测试课时遇到了困难,我像往常一样不知所措。我写了以下内容,但我不

  • 本文向大家介绍mysql触发器之创建使用触发器简单示例,包括了mysql触发器之创建使用触发器简单示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了mysql触发器之创建使用触发器。分享给大家供大家参考,具体如下: 我们可以可以使用CREATE TRIGGER语句创建一个新的触发器,来看下具体的语法: 然后我们来详细看下上述sql的具体含义: 将触发器名称放在CREATE TRIGGER

  • 问题内容: 假设我有一个类似 测试此bean实际上将在其指定日期( 即 最接近每月15日的工作日)触发的最佳方法是什么? 更新 :这应该是一个单元测试,所以我不会启动虚拟机或更改系统时间。 问题答案: 首先,没有必要进行自我测试。它是spring框架的一部分,已经过测试。 更好的测试可能是测试您的cron表达式是否符合您的期望。这里的一种选择是使用Quartz的类。给定一个对象,您可以调用,该表达

  • 我有一个Java项目,它使用了一些Azure函数,如HttpTrigger和QueueTrigger。我使用原型来生成这个项目,因此它可以使用HttpTrigger的一些样板代码和它的单元测试,但对QueueTrigger没有任何帮助。我正试图得到帮助,为这个QueueTrigger编写一个好的单元测试,它实际上是从队列中读取消息(弹出)。队列的代码如下所示: 有没有人能推荐一下这个队列触发azu

  • 你好 我正在Salesforce内部为trigger进行单元测试,我不断遇到一个似乎无法解决的错误,所以我希望有更多经验的人能帮助我回到正轨。我已经在Google上搜索过很多次了,我的代码结构也被弄乱了,但我找不到解决方案。 目的: 我的任务是编写一个触发器,该触发器将处理维护每个开发人员的案例排名所需的逻辑。每个开发人员都被分配了案例,这些案例可能有也可能没有由业务确定的优先级。每个开发人员在任