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
Nishit MistryyyNishit Mistryyy 

delete batch records

I have a class and I am trying to write a test class for it here is the code:
global class BatchMassDeleteDraftCaseRecs Implements Database.batchable<sobject>{
    
    global BatchMassDeleteDraftCaseRecs(){
         
    }
    global Database.QueryLocator start(Database.BatchableContext BC){
        
        String statusDraft = 'Draft';
        String statusNew = 'New';
        String statusClosed = 'Closed';
        return Database.getQueryLocator('SELECT Id, Status FROM Case WHERE (Status = :statusDraft OR Status = :statusNew OR Status = :statusClosed) and FileUploadFlag__c =true');
    }
    global  void execute(Database.BatchableContext BC,List<SObject> scope){
        delete scope;
    }
    global void finish(Database.BatchableContext BC){
    }
}
Best Answer chosen by Nishit Mistryyy
CharuDuttCharuDutt
Hii Nishit
Try Below Test Class
@isTest
public class BatchMassDeleteDraftCaseRecs{
    @isTest
    public static void unitTest(){
        
        Case cas = new Case(Subject = 'Test Subject', Status ='New', Priority = 'Medium', Origin = 'Email'); 
        insert cas;
        test.startTest();
        BatchMassDeleteDraftCaseRecs obj = new BatchMassDeleteDraftCaseRecs();
        DataBase.executeBatch(obj); 
        test.stopTest();
    }
}
Please Mark It As Best Asnwer If It Helps
Thank You!

All Answers

CharuDuttCharuDutt
Hii Nishit
Try Below Test Class
@isTest
public class BatchMassDeleteDraftCaseRecs{
    @isTest
    public static void unitTest(){
        
        Case cas = new Case(Subject = 'Test Subject', Status ='New', Priority = 'Medium', Origin = 'Email'); 
        insert cas;
        test.startTest();
        BatchMassDeleteDraftCaseRecs obj = new BatchMassDeleteDraftCaseRecs();
        DataBase.executeBatch(obj); 
        test.stopTest();
    }
}
Please Mark It As Best Asnwer If It Helps
Thank You!
This was selected as the best answer
SwethaSwetha (Salesforce Developers) 
HI,
Try the below code that gives 100% coverage
@isTest
public class BatchMassDeleteDraftCaseRecsTest{
    @isTest
    public static void BatchMassDeleteDraft(){
        List<Case> c =   new List<Case>{
                          new Case(Status ='New',  Origin = 'Email',FileUploadFlag__c =true),
                          new Case( Status ='Working', Origin = 'Phone',FileUploadFlag__c =true)};  
        
        insert c;
        test.startTest();
        BatchMassDeleteDraftCaseRecs b = new BatchMassDeleteDraftCaseRecs();
        database.executeBatch(b);
        test.stopTest();


List<Case> caslt1= [select id,Status from Case where status=‘New’];
List<Case> caslt2=[select id,Status from Case where Status=‘Working’];
    system.assertEquals(0, caslt1.size());
    system.assertEquals(1, caslt2.size());
    }
}

CharuDutt's code would also give 100%.The only correction would be that the testclass name should not be the same as the batch class name. Also,it is best practice and important to use 
AssertEquals() that lets you test acceptance criteria in your tests. This is useful in verifying that your new feature/code is working correctly, ensuring new features did not break any existing code. 

If this information helps, please mark the answer as best. Thank you
CharuDuttCharuDutt
Hii Nishit
Try Below Test Class 100% Code Coverage
@isTest
public class BatchMassDeleteDraftCaseRecsTest{
@isTest
public static void unitTest(){

Case cas = new Case(Subject = 'Test Subject', Status ='New', Priority = 'Medium', Origin = 'Email', FileUploadFlag__c = true); 
insert cas;
test.startTest();
BatchMassDeleteDraftCaseRecs obj = new BatchMassDeleteDraftCaseRecs();
        DataBase.executeBatch(obj); 
test.stopTest();
}
}
Please Mark It As Best Asnwer If It Helps
Thank You!
Jaya Karthik  karnatiJaya Karthik karnati
Hi Nishit,

Based on the code you have shared . I would suggest below modification in apex class query.
String[] CaseStatus = 'Draft,New,Closed'.split(',');
return Database.getQueryLocator('SELECT Id, Status FROM Case WHERE Status = :CaseStatus and FileUploadFlag__c =true');

Apex test class : Please try use the below test class

For perfect test class writing Kindly refer to the below URL : https://trailhead.salesforce.com/content/learn/modules/apex_testing/apex_testing_data
 
@isTest
public class BatchMassDeleteDraftCaseRecsTest{
    @isTest
    public static void MultiDatacleanUpTest(){
        
		List<Case> cases = new List<Case>();       
		for(Integer i=0;i<200;i++) {
            Case cs = new Case(Subject = 'Test'+ i , Status ='New', Priority = 'Medium', FileUploadFlag__c = true);
            cases.add(cs);
        }
		for(Integer i=201;i<401;i++) {
            Case cs = new Case(Subject = 'Test'+ i , Status ='Closed', Priority = 'Medium', FileUploadFlag__c = true);
            cases.add(cs);
        }
		for(Integer i=401;i<601;i++) {
            Case cs = new Case(Subject = 'Test'+ i , Status ='Draft', Priority = 'Medium', FileUploadFlag__c = true);
            cases.add(cs);
        }
        insert cases;
        test.startTest();
        BatchMassDeleteDraftCaseRecs obj = new BatchMassDeleteDraftCaseRecs();
        DataBase.executeBatch(obj); 
        test.stopTest();
    }
	@isTest
    public static void SingleNewDatacleanUpTest(){
	
	Case cs = new Case(Subject = 'Test'+ i , Status ='New', Priority = 'Medium', FileUploadFlag__c = true);
	insert cs;
		test.startTest();
		BatchMassDeleteDraftCaseRecs obj = new BatchMassDeleteDraftCaseRecs();
		DataBase.executeBatch(obj); 
		test.stopTest();
	}
	@isTest
    public static void SingleClosedDatacleanUpTest(){
	
	Case cs = new Case(Subject = 'Test'+ i , Status ='Closed', Priority = 'Medium', FileUploadFlag__c = true);
	insert cs;
		test.startTest();
		BatchMassDeleteDraftCaseRecs obj = new BatchMassDeleteDraftCaseRecs();
		DataBase.executeBatch(obj); 
		test.stopTest();
	}
	@isTest
    public static void SingleDraftDatacleanUpTest(){
	
	Case cs = new Case(Subject = 'Test'+ i , Status ='Draft', Priority = 'Medium', FileUploadFlag__c = true);
	insert cs;
		test.startTest();
		BatchMassDeleteDraftCaseRecs obj = new BatchMassDeleteDraftCaseRecs();
		DataBase.executeBatch(obj); 
		test.stopTest();
	}
		@isTest
    public static void NoDatacleanUpTest(){
	
	Case cs = new Case(Subject = 'Test'+ i , Status ='Draft', Priority = 'Medium', FileUploadFlag__c = false);
	insert cs;
		test.startTest();
		BatchMassDeleteDraftCaseRecs obj = new BatchMassDeleteDraftCaseRecs();
		DataBase.executeBatch(obj); 
		test.stopTest();
	}

}

If you found this answer helpful kindly mark it as best answer.

Thanks,
Karthik