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
sumithasumitha 

Problem in writing Test class for Apex class with at least 80% coverage

Hi everyone,
I have create a apex class,used  for updating the discount fields from account into Opportunity/QuoteLineItem fields.
 
public class DistributorDiscountChangeTriggerClass
{
     
   @future /* Due to Apex CPU Time Limit issue we used @future annotation */
     public static void DisupdService(set<Id> accByIds) /* Get the value from Apex */
    {
       if(checkrecursive.runonce()) 
           /*checkRecursive Class - used for run the trigger one time */
    
{
    try // Try -block
  {
       // Get the Open Opportunity Id, Distributor (Account ID) of the particular account. //
         Map<Id, Opportunity> oppByIds = new Map<Id,Opportunity>([SELECT Id,Distributor__c FROM Opportunity WHERE Distributor__c IN:accByIds AND IsClosed = FALSE]);        
         System.debug('Opportunity ID' +oppByIds.size());
      
        // Get the Quotelineitem details by using filtered Open Opportunity(oppByids) //
         List<QuoteLineItem> qlitmp= new List<QuoteLineItem>([select id,quote.opportunity.Distributor__c,Disti_Service_Product_Temp_Hidden__c,quote.opportunity.Override_Renewal_Discount__c,quote.opportunity.RecordType.name,Distributor_Discount_1__c,quote.opportunity.Distributor__r.Distributor_Discount_Renewal__c,product2.family,quote.opportunity.Distributor__r.Distributor_Discount_Service__c ,quote.opportunity.Distributor__r.Distributor_Discount_Product__c from quotelineitem where quote.opportunityID IN: oppByIds.keyset() and product2.family='Service']); 
     System.debug('qlitmp -list'+qlitmp.size());  
      
        //Get the details of Open opportunity for Record Type
       List<Opportunity> oppqt= new List<Opportunity>([ SELECT Id,RecordType.name ,Override_Renewal_Discount__c,Distributor__r.Distributor_Discount_Renewal__c,Distributor__r.Distributor_Discount_Product__c,Distributor__r.Distributor_Discount_Service__c,Distributor_Discount_Product_Temp__c,Distributor_Discount_Service_Temp__c,Distributor__c FROM Opportunity WHERE Id IN: oppByIds.keySet() /*FOR UPDATE*/]);
      System.debug('Opportunity -list'+oppqt.size());   
   if ( !accByIds.isEmpty() )  // If account(accbyIds) Id is not null , the process enter into the IF loop
    {
     
        System.debug('Inside if Loop');
       
       
         for ( Opportunity qt: oppqt ) 
         {
        // NST's Record Type == Service Renewal //   
         if(qt.RecordType.name=='Service Renewal' && qt.Override_Renewal_Discount__c==false)
        { 
            System.debug('inside if SR false');
            qt.Distributor_Discount_Service_Temp__c=  qt.Distributor__r.Distributor_Discount_Renewal__c;
             qt.Distributor_Discount_Product_Temp__c= qt.Distributor__r.Distributor_Discount_Product__c;
             System.debug('Distributor_Discount_Renewal__c '+  qt.Distributor_Discount_Service_Temp__c); 
          
        }
      else  if(qt.RecordType.name=='Service Renewal' && qt.Override_Renewal_Discount__c==true)
        { 
            System.debug('inside if SR true');
            qt.Distributor_Discount_Service_Temp__c=  qt.Distributor__r.Distributor_Discount_Service__c;
            qt.Distributor_Discount_Product_Temp__c=qt.Distributor__r.Distributor_Discount_Product__c;
             System.debug('Distributor_Discount_Service__c '+  qt.Distributor_Discount_Service_Temp__c); 
          
        }
             
              //EOF NST's Record Type == Service Renewal //

    else if ( qt.Distributor__c != null) 
    {
                System.debug('Distributor__c!= null');
               qt.Distributor_Discount_Service_Temp__c= qt.Distributor__r.Distributor_Discount_Service__c;
                qt.Distributor_Discount_Product_Temp__c=qt.Distributor__r.Distributor_Discount_Product__c;
             System.debug('opportunity.Distributor_Discount_Service_Temp__c '+  qt.Distributor_Discount_Service_Temp__c); 

           }   
               
         }
         update oppqt;//opp
         }
      for(opportunity optyid : oppqt)
      {
          system.debug('optyid'+optyid.Distributor_Discount_Service_Temp__c);
          system.debug('optyid'+optyid.id);
      }
  /*
 for(quotelineitem qlitemp: qlitmp)
 {
   if(qlitemp.quote.opportunity.RecordType.name=='Service Renewal' && qlitemp.quote.opportunity.Override_Renewal_Discount__c==false && qlitemp.product2.family=='Service')
        { 
            system.debug('1-false');
           
           qlitemp.Disti_Service_Product_Temp_Hidden__c=qlitemp.quote.opportunity.Distributor__r.Distributor_Discount_Renewal__c;
         }
     else if(qlitemp.quote.opportunity.RecordType.name=='Service Renewal' && qlitemp.quote.opportunity.Override_Renewal_Discount__c==true && qlitemp.product2.family=='Service')
        { 
            system.debug('1-false');
           
           qlitemp.Disti_Service_Product_Temp_Hidden__c=qlitemp.quote.opportunity.Distributor__r.Distributor_Discount_Service__c;
         }
  else if(qlitemp.product2.family=='Service' && qlitemp.quote.opportunity.Distributor__c != null)
        {
            system.debug('12');
                 qlitemp.Disti_Service_Product_Temp_Hidden__c=qlitemp.quote.opportunity.Distributor__r.Distributor_Discount_Service__c ; 
        }
        
             }
        update qlitmp;  
  */
        Map<Id, NST__c> nstdisByIds = new Map<Id,NST__c>( [ SELECT Id, Distributor_Account__c FROM NST__c WHERE  Distributor_Account__c IN: accByIds AND NST_Status__c = 'Draft']);                
       System.debug('nstdisByIds ID' +nstdisByIds.size());

     List<NST__c> nstdis = [ SELECT Id,recordtype.id,recordtype.name,Distributor_Account__r.Distributor_Discount_Renewal__c,Distributor_Account__r.Distributor_Discount_Product__c,Distributor_Account__r.Distributor_Discount_Service__c, Product_Contractual_Discount_Temp__c,Service_Contractual_Discount_Temp__c,Distributor_Account__c FROM NST__c WHERE Id IN: nstdisByIds.keySet()];
    System.debug('nstdis -list'+nstdis.size());   
           for ( NST__c qt: nstdis ) 
         {
            System.debug('Inside FOr');
             // NST's Record Type == Service Renewal //
        if(qt.RecordType.name=='Service Renewal')
        { 
            System.debug('inside if');
            qt.Service_Contractual_Discount_Temp__c=  qt.Distributor_Account__r.Distributor_Discount_Renewal__c;
             System.debug('Distributor_Discount_Renewal__c '+  qt.Service_Contractual_Discount_Temp__c); 
        }
        
         // End of NST's Record Type == Service Renewal //
    else if ( qt.Distributor_Account__c != null) 
    {

               qt.Service_Contractual_Discount_Temp__c= qt.Distributor_Account__r.Distributor_Discount_Service__c;
             System.debug('opportunity.Service_Contractual_Discount_Temp__c '+  qt.Service_Contractual_Discount_Temp__c);  
           }       
         }

      update nstdis;  
        system.debug('Updated'+nstdis.size());
           system.debug('Updated'+nstdis);
        
    }

    catch(Exception e)
    {
       system.debug('e'+e);
       

    }
    }
}
}

Please advice.
Thanks in advance.

Regards
Sumitha P
Amit M 3Amit M 3
If you can provice the exact problem that you are facing while writing test class code, then it will be useful. You can also go through documentation (https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing.htm) regarding test classes. You can try this (https://trailhead.salesforce.com/en/modules/apex_testing/units/apex_testing_intro) trailhead module as well.