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

如何为apex触发器编写测试类

谷梁子昂
2023-03-14

有人能给我解释一下如何为下面这样的apex触发器编写测试类吗?

trigger LeadAssignmentTrigger on Broker__c (before insert,before update) 
    {
       List<Broker__c > leadsToUpdate = new List<Broker__c >();
        for (Broker__c broker: Trigger.new)
        {     
            if (broker.Referral_ID__c!= NULL)
            {
                String str = broker.Referral_ID__c;
                Integer ln = str.Length();
                String likeStr = '%'+str.subString(ln-10, ln-7)+'%'+str.subString(ln-7, ln-4) +'%'+ str.subString(ln-4);

                // Find the sales rep for the current zip code
                List<User> zip = [select Id from User
                                       where MobilePhone Like : likeStr];

                // if you found one
                if (zip.size() > 0) 
                {    
                    //assign the lead owner to the zip code owner
                    broker.OwnerId = zip[0].Id; 
                    leadsToUpdate.add(broker);
                }
               else
                {
                    // Throw Error
                    broker.addError('Invalid Referrel ID');
                }
            } 
        }
     }

我是Salesforce的新手。有人帮助我如何为上述触发器编写顶点类(测试类)吗?

@isTest 
private class LeadAssignmentTriggerTest 
{
    static testMethod void validateHelloWorld() 
    {


        User userObj =  new User( Id = UserInfo.getUserId() );
        userObj.MobilePhone = '5555555555';
        update userObj


        test.startTest();       
            try
            {
                Broker__c broker =  new Broker__c();
                broker.Referral_ID__c = '55555555';
                broker.City ='New York';
                // Add all required field here
                insert broker;
            }
            Catch(Exception ee)
            {
            }
        test.stopTest();    
    }
}

AccountBrowseExtensionTesttestAccountBrowseSystem。DmlException:插入失败。第0行第一个异常;第一个错误:FIELD\u CUSTOM\u VALIDATION\u EXCEPTION,City是必需的:[]堆栈跟踪:Class。AccountBrowseExtensionTest。testAccountBrowse:第20行第1列CloseActivityController测试CloseActivitySystem。DmlException:插入失败。第0行第一个异常;第一个错误:FIELD\u CUSTOM\u VALIDATION\u EXCEPTION,City是必需的:[]堆栈跟踪:Class。关闭ActivityController测试。testCloseActivity:第13行第1列ChangeOwnerControllerTestChangeOwnerSystem。DmlException:插入失败。第0行第一个异常;第一个错误:FIELD\u CUSTOM\u VALIDATION\u EXCEPTION,City是必需的:[]堆栈跟踪:Class。ChangeOwnerController测试。testchangeOwner:第20行第1列CNTACTSClassTestTestCNTACTSSSystem。DmlException:插入失败。第0行第一个异常;第一个错误:FIELD\u CUSTOM\u VALIDATION\u EXCEPTION,City是必需的:[]堆栈跟踪:Class。cntactsclassTest。测试行为:第13行第1列LogacallControllerTestLogacallSystem。DmlException:插入失败。第0行第一个异常;第一个错误:FIELD\u CUSTOM\u VALIDATION\u EXCEPTION,City是必需的:[]堆栈跟踪:Class。LogACallControllerTest。testLogACall:第14行第1列RedirectControllerTesttestRedirectSystem。DmlException:插入失败。第0行第一个异常;第一个错误:FIELD\u CUSTOM\u VALIDATION\u EXCEPTION,City是必需的:[]堆栈跟踪:Class。重定向控制器测试。testRedirect:第20行第1列TestAccountSharetestSystem。DmlException:插入失败。第0行第一个异常;第一个错误:FIELD\u CUSTOM\u VALIDATION\u EXCEPTION,固定约会后必须输入手机号码:[]堆栈跟踪:类。TestAccountShare。测试:第40行第1列

共有1个答案

曹景铄
2023-03-14

您正在为插入前的Broker\uu c和更新前的Broker\uU c编写触发器

因此,由于它是一个触发器,所以每次插入或更新记录时,代码都会运行。

要编写测试类,只需创建两种测试方法:

  1. 一个插入Broker\uu c记录

在此处查看如何创建测试类

顺便说一下,您应该在此处查看有关如何编写更好的触发器和处理程序的最佳编码实践

编辑:还应该删除循环内的SOQL,并在for循环外创建查询映射

 类似资料:
  • 我已在Salesforce APEX中记录了触发器。它工作正常。 触发器代码为: 现在我正在尝试为它的测试类编写代码。它在线上给出错误,说对象无法解析为字符串。 测试等级代码为: 期待找到解决方案。任何帮助都将不胜感激。 谢谢

  • 我创建了一个触发器,它调用future类对第三方url进行http调用,这里一切正常,但测试类没有覆盖opportunity字段IsWon //Apex触发器 //具有future方法的触发器的future类 //我被卡住的触发器的测试类:-

  • 我在Apex中有一个触发器。如何编写检查触发器是否被调用的单元测试?

  • tl;dr-在继续测试之前,如何使测试类等待特定触发器完成其更新或插入? 出身背景 我有一个触发器,每当创建帐户对象时都会创建一个新的对象,然后将这两条记录相互关联(请参阅下面的帐户触发器)。 我还在Portal\u Content\u c对象上创建了一个触发器,在删除记录时触发该触发器。删除时,触发器会查找相关的帐户记录并将其删除(请参见下面的门户内容触发器)。 我的问题是关于我的门户内容测试类

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

  • 此函数用于更新数据库中的用户详细信息。有人能帮我写这个函数的测试用例吗。 更新 代码: mockMvc。执行(post(“/更新详细信息”)。接受(MediaType.TEXT\u HTML)。参数(params))。andExpect(状态()。isOk()); 产生的错误: 这上面说帖子法是禁止的我的测试失败了 这是我的测试课