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
rajesh reddy 3rajesh reddy 3 

I have a requirement test class coverage one test class is covering the two Batches Can anyone help me out on this Pls

Batch1:
global class ScheduleBatchToResetKBArticleReviewer implements schedulable{
    global void execute(SchedulableContext sc){
        //Custom setting
        KBAutomatedOperations__c cSData = KBAutomatedOperations__c.getValues('Reset KBArticle Reviewer');
        System.debug('cSData----->'+cSData);
        if(cSData != null){
            //Verify whether to run batch job or not .verify whether to skin next run
            if(cSData.Active__c && !cSData.SkipNextRun__c){
                    //initialize batch class
                    BatchToResetKBArticleReviewer executeBacth = new BatchToResetKBArticleReviewer();
                    //Execute batch
                    ID batchID = Database.executeBatch(executeBacth,1);
            }
            
            CronTrigger cronKBResetReviewer = [SELECT Id, CronExpression, PreviousFireTime ,TimesTriggered, NextFireTime,CronJobDetailID,CronJobDetail.Name,State FROM CronTrigger WHERE id =: sc.getTriggerId()];
            cSData.SkipNextRun__c = false;
            cSData.Previous_Run__c = cronKBResetReviewer.PreviousFireTime;
            cSData.Next_Run__c = cronKBResetReviewer.NextFireTime;
            update cSData;      
        }       
    }//End of Method  
}//End of Class

Batch2:

global class BatchToResetKBArticleReviewer implements Database.Batchable<String>{
    global Iterable<String> start(Database.BatchableContext BC)
    {   
        String stringQuery ='Select Id, Current_Reviewer__c from ';
        String whereClause =' where PublishStatus =\'Draft\' and Language = \'en_US\' and Current_Reviewer__c != null and Article_Status__c != \'Published\'';
        
        return new List<String> { stringQuery + 'Break_Fix__Kav'+ whereClause , stringQuery + 'Tutorial__kav'+ whereClause,stringQuery + 'Tech_Alert__kav'+ whereClause,stringQuery + 'FAQ__kav'+ whereClause};
    }

    global void execute(Database.BatchableContext BC,List<String> scope){
    //create  map which have knowledgeArticleId as key and sObject as value. SObject can be of any article type[Break fix , FAQ, Tech Alert]
        Map<Id,SObject> kaIdwithArticletypeSObjectMap = new Map<Id,SObject>();
        //For each article type add key and value to map
        for(String articleTypeQuery : scope){
                kaIdwithArticletypeSObjectMap.putAll(Database.query(articleTypeQuery));
        }
        if(kaIdwithArticletypeSObjectMap.size() > 0){
            for(sobject  sObj : kaIdwithArticletypeSObjectMap.Values()){
                //set current editor with blank value
                sObj.put('Current_Reviewer__c',null);
            }
            try{        
                update kaIdwithArticletypeSObjectMap.values();
            }catch(Exception ex){
                System.debug('### System Exception : '+ex);
                SystemUtils.createApexExceptionLog(ex,'BatchToBlankKBArticleReviewer');
            }                
        }
    }
    
    global void finish(Database.BatchableContext BC){
        System.debug('@@@@@@@@@@@ FINISH METHOD @@@@@@@@@@@@@');
    }
}

For both Batches I written one test class

@isTest
public class TestScheduleBatchToResetKBArticle {

  @isTest static void ScheduleBatchToResetKB_M1(){
        
        KBAutomatedOperations__c kbsetting = new KBAutomatedOperations__c();
        kbsetting.Active__c = true;
        kbsetting.SkipNextRun__c = false;
        kbsetting.name = 'Reset KBArticle Reviewer';
        insert kbsetting;
        
        FAQ__kav testFAQ = new FAQ__kav();
        testFAQ.language = 'en_US';
        testFAQ.urlname = 'testurl1';
        //testFAQ. ValidationStatus = 'Draft';
        testFAQ.title = 'testurl1title';
        testFAQ.Current_Reviewer__c = userInfo.getUserId();
        database.insert(testFAQ);
        
        Test.startTest();
        
        //ScheduleBatchToResetKBArticleReviewer scheduleClass = new ScheduleBatchToResetKBArticleReviewer();
        //String sch = '0 0 0 * * ?';      
        //system.schedule(System.Label.KB_Reset_KBArticle_Reviewer, sch, scheduleClass);
        String CRON_EXP = '0 0 0 1 1 ? 2025';  
        String jobId = System.schedule('testScheduledApex', CRON_EXP, new ScheduleBatchToResetKBArticleReviewer() );
                 
        Test.stopTest();
        
     
        
    }  
 
    
}
 
SonamSonam (Salesforce Developers) 
Did you happen to check which lines of your code are still not tested? if yes, please highlight. If not, you can use the Developer console to find and it will be easier for you to write test code specific to those lines..