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
Thanigai Kumaran BalajiThanigai Kumaran Balaji 

How to write a test class for exporting object details as CSV file

I have created a batch apex but unable to write test class for the same.


global class exportobjectascsvbatch implements Database.Batchable <SObject>{
global Database.QueryLocator start (Database.BatchableContext bc)
{
    String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }

query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = yesterday';
    system.debug(query);
    return Database.getQueryLocator(query);
}
   global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {
       try{     
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += fieldName +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
}

       //send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
}
 
Best Answer chosen by Thanigai Kumaran Balaji
CharuDuttCharuDutt
Hii Balaji
Small Change In Your Batch Class Highlighted
Try Below Test Class 95% Coverage!
global class exportobjectascsvbatch implements Database.Batchable <SObject>{
    global Database.QueryLocator start (Database.BatchableContext bc)
    {
        String SobjectApiName = 'Opportunity';
        Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
        Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
        String query = 'Select ';
        for(String fieldName : fieldMap.keyset() )
        {
            query += fieldname+',';   
        }
        
        query = query.removeEnd(',');

        if(!test.isRunningTest()){
        query += ' from Opportunity where lastmodifieddate = yesterday';
        }else{
            query += ' from Opportunity';
        }
        system.debug(query);
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
    {
        try{     
            String SobjectApiName = 'Opportunity';
            Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
            Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
            String generatedCSVFile = '';
            for(String fieldName : fieldMap.keyset() )
            {
                generatedCSVFile += fieldName +',';     
            }
            generatedCSVFile = generatedCSVFile.removeEnd(',');
            generatedCSVFile = generatedCSVFile + '\n'; 
            for(Opportunity company: OppList){
                for(String fieldName : fieldMap.keyset() )
                {
                    generatedCSVFile += company.get(fieldName)+ ',';     
                }
                generatedCSVFile = generatedCSVFile.removeEnd(',');
                generatedCSVFile = generatedCSVFile + '\n'; 
            }
            
            //send email with generated csv file
            Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
            Blob csvBlob = blob.valueOf(generatedCSVFile);
            String csvName = 'Opportunitybackup.csv';
            csvAttachment.setFileName(csvName);
            csvAttachment.setBody(csvBlob);
            Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
            String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
                String subject = 'Opportunity backup';
            email.setSubject(subject);
            email.setToAddresses(toAddresses);
            email.setPlainTextBody('Opportunity backup');
            email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
            Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
        }
        catch(exception e)
        {
            system.debug('Exception Caught:'+e.getmessage());
        }
    }
    
    global void finish(Database.BatchableContext bc)
    {
    }  
}



###############################################################

@isTest
public class CreateMockTestTest {
    @isTest
    public Static Void unitTest(){
        Account Acc = New Account();
        Acc.Name = 'Test Account';
        Insert Acc;
        Opportunity Opp = new Opportunity();
        Opp.Name = 'Test Opportunity';
        Opp.AccountId = Acc.Id;
        Opp.CloseDate =System.today();
        Opp.StageName = 'Closed Won';
        Insert Opp;
        
        test.startTest();    
          exportobjectascsvbatch lp = new exportobjectascsvbatch();
        Id batchId = Database.executeBatch(lp);
     
        test.stopTest();
    }
}
Please Mark It As Best Answer If It Helps
Thank You!

All Answers

CharuDuttCharuDutt
Hii Balaji
Small Change In Your Batch Class Highlighted
Try Below Test Class 95% Coverage!
global class exportobjectascsvbatch implements Database.Batchable <SObject>{
    global Database.QueryLocator start (Database.BatchableContext bc)
    {
        String SobjectApiName = 'Opportunity';
        Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
        Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
        String query = 'Select ';
        for(String fieldName : fieldMap.keyset() )
        {
            query += fieldname+',';   
        }
        
        query = query.removeEnd(',');

        if(!test.isRunningTest()){
        query += ' from Opportunity where lastmodifieddate = yesterday';
        }else{
            query += ' from Opportunity';
        }
        system.debug(query);
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
    {
        try{     
            String SobjectApiName = 'Opportunity';
            Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
            Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
            String generatedCSVFile = '';
            for(String fieldName : fieldMap.keyset() )
            {
                generatedCSVFile += fieldName +',';     
            }
            generatedCSVFile = generatedCSVFile.removeEnd(',');
            generatedCSVFile = generatedCSVFile + '\n'; 
            for(Opportunity company: OppList){
                for(String fieldName : fieldMap.keyset() )
                {
                    generatedCSVFile += company.get(fieldName)+ ',';     
                }
                generatedCSVFile = generatedCSVFile.removeEnd(',');
                generatedCSVFile = generatedCSVFile + '\n'; 
            }
            
            //send email with generated csv file
            Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
            Blob csvBlob = blob.valueOf(generatedCSVFile);
            String csvName = 'Opportunitybackup.csv';
            csvAttachment.setFileName(csvName);
            csvAttachment.setBody(csvBlob);
            Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
            String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
                String subject = 'Opportunity backup';
            email.setSubject(subject);
            email.setToAddresses(toAddresses);
            email.setPlainTextBody('Opportunity backup');
            email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
            Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
        }
        catch(exception e)
        {
            system.debug('Exception Caught:'+e.getmessage());
        }
    }
    
    global void finish(Database.BatchableContext bc)
    {
    }  
}



###############################################################

@isTest
public class CreateMockTestTest {
    @isTest
    public Static Void unitTest(){
        Account Acc = New Account();
        Acc.Name = 'Test Account';
        Insert Acc;
        Opportunity Opp = new Opportunity();
        Opp.Name = 'Test Opportunity';
        Opp.AccountId = Acc.Id;
        Opp.CloseDate =System.today();
        Opp.StageName = 'Closed Won';
        Insert Opp;
        
        test.startTest();    
          exportobjectascsvbatch lp = new exportobjectascsvbatch();
        Id batchId = Database.executeBatch(lp);
     
        test.stopTest();
    }
}
Please Mark It As Best Answer If It Helps
Thank You!
This was selected as the best answer
Thanigai Kumaran BalajiThanigai Kumaran Balaji
Thanks a lot , it helped
Thanigai Kumaran BalajiThanigai Kumaran Balaji
But how did "  if(!test.isRunningTest() " helped ?