【问题标题】:Test Class in apex顶点测试类
【发布时间】:2018-12-05 03:01:03
【问题描述】:

所以我是 salesforce 的新手,我完成了培训,现在我正在做一个项目。但是在我的项目中,我偶然发现了一个测试类,我没有找到编写它的方法,所以如果有人能帮助我找到一种编写它的方法,我将不胜感激。代码如下:

    public class AP01_Opportunity 
{
    //Method to create a new service contract when opportunity = Gagné
    public static void CreateContract(List<Opportunity> listOpp, Map<Id, Opportunity> oldMap)
    {
        //Variable Declaration
        ServiceContract sc;
        List<ServiceContract> listSCToAdd = new List<ServiceContract>();
        List<ContractLineItem> listContractItems = new List<ContractLineItem>();
        List<Opportunity> listOppGagne = new list<Opportunity>();

        //Loop in list of opportunities
        for(Opportunity opp : listOpp)
        {
            if(opp.StageName == Label.ClotureGagne && !oldMap.get(opp.Id).isWon)
            {
                listOppGagne.add(opp);
            }
        }
        //check if list has opportunity becoming won
        if(listOppGagne.size()  > 0){

            Map<Id, Opportunity> mapOppGagne = new Map<Id, Opportunity> ([SELECT Id,
                                                                          Name,
                                                                          StageName,
                                                                          Pricebook2Id,
                                                                          Account.Name, 
                                                                          (SELECT Id,
                                                                           PricebookEntryId,
                                                                           PricebookEntry.Name, 
                                                                           Quantity, 
                                                                           UnitPrice 
                                                                           FROM OpportunityLineItems)
                                                                          FROM Opportunity
                                                                          WHERE Id in :listOppGagne]);

            for( Opportunity opp : listOppGagne )
            {
                //Create new service contract
                sc = new ServiceContract();
                sc.Name = opp.Name;
                sc.ApprovalStatus = Label.Activated;
                sc.OpportunityId__c = Id.valueOf(opp.Id);
                sc.Pricebook2Id = opp.Pricebook2Id;
                sc.StartDate = Date.today();
                listSCToAdd.add(sc);
            }
            if(listSCToAdd.size() > 0){
                insert listSCToAdd;
                Opportunity currentOpp;
                ContractLineItem cli;
                Id oppId;
                for(ServiceContract servcont : listSCToAdd)
                {
                    oppId = servcont.OpportunityId__c;
                    if(mapOppGagne.containsKey(oppId))
                    {
                        currentOpp = mapOppGagne.get(oppId);
                        //copy the oppLineItems per opportunity to the respective Service Contract
                        for(OpportunityLineItem items : currentOpp.OpportunityLineItems)
                        {
                            cli = new ContractLineItem();
                            cli.PricebookEntryId = items.PricebookEntryId;
                            cli.Quantity = items.Quantity;
                            cli.UnitPrice = items.UnitPrice;
                            cli.ServiceContractId = servcont.Id;
                            listContractItems.add(cli);
                        }
                    }
                }
                if(listContractItems.size() > 0)
                {
                    insert listContractItems; 
                }
            }


        }
    }
}

此代码是一个触发器,当机会阶段更改为“Cloturé Gagné”(在法语中表示已结束赢得)时,该触发器会使用从机会行项目复制的合同行项目创建新的服务合同记录。

提前谢谢你。

【问题讨论】:

  • 再次您好,如果有人可以帮助我,我仍然卡住了,我真的需要帮助提前谢谢您。
  • 这个类不是触发器。还是你从机会的触发器类中调用它?
  • 我从 Opportunity 的触发器类中调用它,这是我的触发器类:trigger OpportunityAfterUpdate on Opportunity (after update) { if(PAD.canTrigger('AP01_Opportunity')){ AP01_Opportunity.CreateContract(Trigger.new, Trigger.oldMap); } }
  • 对不起,我不明白这一点。您有一个更新后触发器-确定。在这个更新后触发器中你调用一个静态方法? (可以触发)。这个方法有什么作用?最后但并非最不重要的一点是:您说您想为此触发器创建一个测试类。那么这段代码在哪里呢?问题究竟出在哪里?
  • canTrigger 是一种绕过方法,如果它返回 true,它不会通过触发器,它只是绕过它。关于我的测试课,我写不出来。因为我是新手,所以我发现很难写一个,所以我没有代码可以作为我的问题的基础。我对此感到抱歉。我需要有人告诉我怎么做。提前谢谢你。

标签: triggers salesforce apex test-class


【解决方案1】:

为了编写一个简单的测试类,我建议您使用以下指南:https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_qs_test.htm

这个想法很简单:假设您在 Test 类中创建了一个 Opportunity 并在您的情况下进行插入或更新 - 您的触发器类将自动触发并运行 AP01_Opportunity 类中的代码。你可以放一些

System.debug('some message');

检查您的逻辑是否按预期工作以及执行了哪些代码块

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2015-01-14
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多