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
Aman Verma 45Aman Verma 45 

Scheduler and Future method Test Class

I've written Code for sending Reports as email. It Contains future method as well as a Scheduler.
I've written a test class for the same. 
It is giving this error "Methods defined as TestMethod do not support getContent call".
P.S. I am new to Salesforce.
global class Exporter2 implements Schedulable {
    
    public void execute(SchedulableContext sc){
        sendMail();
    }
    @future(callout=true)
    public static void sendMail()
    {
        ApexPages.PageReference report = new ApexPages.PageReference('/00O6F0azs00BTlGa?csv=1');
        Messaging.EmailFileAttachment attachment = new Messaging.EmailFileAttachment();
        attachment.setFileName('report.csv');
        attachment.setBody(report.getContent());
        attachment.setContentType('text/csv');
        Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
        message.setFileAttachments(new Messaging.EmailFileAttachment[] { attachment } );
        message.setSubject('Report');
        message.setPlainTextBody('The report is attached.');
        message.setToAddresses( new String[] {'xyz@zbc.com'} );
        Messaging.sendEmail( new Messaging.SingleEmailMessage[] { message } );
        
    }
}

Here is my Test Class.
@IsTest
public class Exporter2Test {
    
    @IsTest static void  testschedule() {

        Test.StartTest();
        Exporter2 exp = new Exporter2();
        String sch = '0 05 11 * * ?';
        system.schedule('Report test',sch,exp);
        Test.stopTest();
    }
}



 
Best Answer chosen by Aman Verma 45
Raj VakatiRaj Vakati
Change your code as below
 
global class Exporter2 implements Schedulable {
    
    public void execute(SchedulableContext sc){
        sendMail();
    }
    @future(callout=true)
    public static void sendMail()
    {
if(!Test.isRunningTest()){
        ApexPages.PageReference report = new ApexPages.PageReference('/00O6F0azs00BTlGa?csv=1');
        Messaging.EmailFileAttachment attachment = new Messaging.EmailFileAttachment();
        attachment.setFileName('report.csv');
        attachment.setBody(report.getContent());
        attachment.setContentType('text/csv');
        Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
        message.setFileAttachments(new Messaging.EmailFileAttachment[] { attachment } );
        message.setSubject('Report');
        message.setPlainTextBody('The report is attached.');
        message.setToAddresses( new String[] {'xyz@zbc.com'} );
        Messaging.sendEmail( new Messaging.SingleEmailMessage[] { message } );
        }
    }
}


And Text Class 
 
@IsTest
public class Exporter2Test {
    
    @IsTest static void  testschedule() {

        Test.StartTest();
		Test.setCurrentPage('/00O6F0azs00BTlGa?csv=1');
        Exporter2 exp = new Exporter2();
        String sch = '0 05 11 * * ?';
        system.schedule('Report test',sch,exp);
        Test.stopTest();
    }
}