首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Salesforce触发器测试类

Salesforce触发器测试类
EN

Stack Overflow用户
提问于 2018-03-09 05:48:00
回答 2查看 1.7K关注 0票数 0

下面是我的Apex触发器。我是初学者,试着编写它的测试类,但是不断地出错"System.DmlException:插入失败。第0行的第一个异常;第一个错误: REQUIRED_FIELD_MISSING,错误:在产品相关列表中为这个机会选择了价格表之前,您不能选择产品。“

在机会时触发TrgrOptyHighestCustmorePrice (插入前,更新前){

代码语言:javascript
复制
public Id oid;
public String bidType;
public String BUCode;

for(Opportunity o : trigger.new)
{
    oid = o.Id; 
    bidType = o.BidType__c;
    BUCode = o.Business_Line_BU__c;
}

List<OpportunityLineItem> oliList = new list<OpportunityLineItem>([SELECT id, Customer_Price__c, ReCat_Product_Line__c 
                                                               FROM OpportunityLineItem 
                                                               WHERE OpportunityId =: oid ORDER BY 
                                                               Customer_Price__c DESC LIMIT 1]);

for(OpportunityLineItem oli : oliList)
{
    if(bidType == 'Competitive' && oli.ReCat_Product_Line__c == 'DMS')
    {
        BUCode = 'BL.619';
    }
    if(bidType == 'Competitive' && (oli.ReCat_Product_Line__c == 'EMS' || oli.ReCat_Product_Line__c == 'GMS'))
    {
        BUCode = 'BL.620';
    }
    if(bidType == 'Competitive' && oli.ReCat_Product_Line__c == 'MMS')
    {
        BUCode = 'BL.622';
    }
    if(bidType == 'Sole Sourced' && oli.ReCat_Product_Line__c == 'DMS')
    {
        BUCode = 'BL.624';
    }
    if(bidType == 'Sole Sourced' && (oli.ReCat_Product_Line__c == 'EMS' || oli.ReCat_Product_Line__c == 'GMS'))
    {
        BUCode = 'BL.621';
    }
    if(bidType == 'Sole Sourced' && oli.ReCat_Product_Line__c == 'MMS')
    { 
        BUCode = 'BL.623';
    }        
}

for(Opportunity opt : trigger.new)
{
    opt.Business_Line_BU__c = BUCode;        
}    
}

试题班

代码语言:javascript
复制
@isTest(seeAllData=true)
public class Test_TrgrOptyHighestCustmorePrice {
    private static testmethod void TrgrOptyHighestCustmorePriceTest(){
        Test.startTest();
        //Insert a test product.
        Product2 p1 = new Product2(Name='Product Monthly 1111', isActive=true, CurrencyIsoCode='USD', ReCat_Product_Line__c = 'DMS');
        insert p1; 

        // Get standard price book ID.
        Id pricebookId = Test.getStandardPricebookId();

        // Insert a price book entry for the standard price book.
        PricebookEntry standardPrice = new PricebookEntry(
            Pricebook2Id = pricebookId, Product2Id = p1.Id,
            UnitPrice = 10000, IsActive = true);
        insert standardPrice;

        Pricebook2 customPB = new Pricebook2(Name='Custom Pricebook', isActive=true);
        insert customPB;

        PricebookEntry customPrice = new PricebookEntry(
            Pricebook2Id = customPB.Id, Product2Id = p1.Id,
            UnitPrice = 12000, IsActive = true);
        insert customPrice;

        // Insert Opportunity
        Opportunity opt = new Opportunity(Name='Test',StageName='Prospect', 
                                          CloseDate=date.today(),BidType__c = 'Competitive', 
                                          Business_Line_BU__c = 'BL.619', 
                                          PriceBook2 = customPB);
        insert opt;

        OpportunityLineItem optLI = new OpportunityLineItem(OpportunityId = opt.id, Product2Id = p1.Id);
        insert optLI;
        update opt;
        Test.stopTest();
    }

}

我无法理解如何测试我的简单触发器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-13 08:41:56

这是因为你没有填写机会线项目所需的所有字段。参见:必需字段的opportunitylineitem.htm

作为一个例子,这将起作用:

代码语言:javascript
复制
OpportunityLineItem optLI = new OpportunityLineItem(OpportunityId = opt.id, Product2Id = p1.Id, TotalPrice = 100, PricebookEntryId=customPrice.Id, Quantity =3);
票数 0
EN

Stack Overflow用户

发布于 2018-03-09 11:38:55

首先插入机会。然后用pricebookid更新机会。

代码语言:javascript
复制
     // Insert Opportunity
    Opportunity opt = new Opportunity(Name='Test',StageName='Prospect', 
                                      CloseDate=date.today(),BidType__c = 'Competitive', 
                                      Business_Line_BU__c = 'BL.619'
                                      );
    insert opt;
opt.PriceBook2 = customPB;
update opt;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49187366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档