function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Vikas Kumar 135Vikas Kumar 135 

Required fields are missing: [Pricebook2Id] error when creating Test Class

Hi All,

I am getting below error when I run a test on a QuoteLineItem test class I created.
System.DmlException: Insert failed. First exception on row 0; first error: REQUIRED_FIELD_MISSING, Required fields are missing: [Pricebook2Id]: [Pricebook2Id]

My test class is below:

@isTest
public class QuoteLineItemResourceTest {
    public static testMethod void getQLI() {
    
        Account objaccount=new Account();
        objaccount.Name='TestAccount';
        insert objaccount;
        
        Id standardPB = Test.getStandardPricebookId();
        
        Opportunity objopportunity=new Opportunity();
        objopportunity.AccountID=objaccount.id;
        objopportunity.Name='TestOpportunity';
        objopportunity.StageName='Prospecting';
        objopportunity.CloseDate=Date.today();
        objopportunity.Pricebook2Id = standardPB;
        insert objopportunity;
        
                 
         Product2 objProduct2=new Product2();
         objProduct2.Name='ABC';
         objProduct2.CurrencyIsoCode='USD';
         insert objProduct2;
         
         PricebookEntry objpricebookentry =new PricebookEntry();
         objpricebookentry.Product2ID = objProduct2.id;
         objpricebookentry.UnitPrice=23.50;
         objpricebookentry.UseStandardPrice=true;
         objopportunity.Pricebook2ID=standardPB;
         insert objpricebookentry;
         
         Quote q1 = new Quote();
         q1.Name = 'Quote 1';
         q1.Budget_Estimate__c = 100;
         q1.OpportunityId = objopportunity.Id;
         q1.Pricebook2ID=standardPB;
         insert q1;
         
         QuoteLineItem objQLI = new QuoteLineItem(QuoteId = q1.Id,
                                                Quantity = 5,
                                                UnitPrice = 10,
                                                PricebookEntryId=objpricebookentry.id,
                                                Product2ID=objProduct2.id,
                                                Operating_System_Id__c = '1;2', 
                                                Third_Party_Provider_Id__c = '3;4',
                                                Third_Party_Audience_Id__c = '5;6',
                                                Country_Id__c = '7;8',
                                                State_Id__c = '4;5',
                                                DMA_Id__c = '6;7',
                                                Content_Limitation_Id__c = '4;5',
                                                Carriers_Id__c = '1;3',
                                                Weather_Temperatures_Id__c = '2;3',
                                                Weather_Conditions_Id__c = '4;5',
                                                Geosegment_Id__c = '2;3',
                                                Start_Date__c = Date.today().addDays(1),
                                                End_Date__c = Date.today().addDays(10),
                                                Planned_Cost__c = 100,
                                                Rate__c = 10,
                                                Planned_Unit__c = 100,
                                                Cost_Method__c = 'CPM');
        insert objQLI;
    

       
       Test.startTest();
        RestRequest req = new RestRequest(); 
        RestResponse res = new RestResponse();
        req.requestURI = '/services/apexrest/QuoteLineItem/'+objQLI.Id; 
        req.httpMethod = 'GET';
        req.addHeader('Content-Type', 'application/json'); 
        RestContext.request = req;
        RestContext.response = res;
        QuoteLineItemResource.doGet();
       
   Test.stopTest();   
   
   
    }
}

Any help will be appreciated. Thanks.
Best Answer chosen by Vikas Kumar 135
Deepali KulshresthaDeepali Kulshrestha
Hi Vikas ,

While creating the instance of price book entry you have added this line in your code:
 objopportunity.Pricebook2ID=standardPB;
Please replace it with:
objpricebookentry.Pricebook2ID=standardPB;
and please make your price book entry active.


I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.

Thanks and Regards,
Deepali Kulshrestha