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
Akshay ShrivastavaAkshay Shrivastava 

test class for standardset controller

Hello guys,
I am trying to write test class but iam unable to remove error and get more then 75% coverage. Can anyone help me.

Apex class ----->
public class SendEmailCtrl {
    public Set<Id> recordIdSet;
    public List<opportunity> oppList;
    public List<Opportunity> opportunities{get;private set;}
    //public List<EmailTemplate> templateName{get;set;}
    private List<EmailTemplate> allEmailTemplates;
    private List<Folder> allEmailTemplateFolders;
    public Integer numberOfSuccessfulMessages{get;set;}
    public String selectedEmailTemplateFolder {public get; public set;}
    public String selectedEmailTemplate {public get; public set;}
    public EmailTemplate chosenEmailTemplate {public get; private set;}
    public SendEmailCtrl(ApexPages.StandardSetController stdSetController){
        opportunities = (List<Opportunity>) stdSetController.getSelected();
        recordIdSet = new Set<Id>();
        numberOfSuccessfulMessages = 0;
        if(opportunities.size()>0)
        {
            for(Opportunity opp : opportunities) 
            {  
                recordIdSet.add(opp.Id);              
            }
        }else{
            ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'Please Select atleast one record'));
            numberOfSuccessfulMessages=1;
        }
        allEmailTemplates = [select Id, Name, Subject, Body, FolderId from EmailTemplate order by Name asc];
        allEmailTemplateFolders = [select Id, Name from Folder where Type = 'Email' order by Name asc];
    }
    
    
    public List<SelectOption> getEmailTemplateFolderOpts() {
        List<SelectOption> opts = new List<SelectOption>();
        opts.add(new SelectOption('null', ' - Select - '));
        for ( Folder f : allEmailTemplateFolders )
            opts.add(new SelectOption(f.Id, f.Name));
        opts.add(new SelectOption(UserInfo.getOrganizationId(), 'Unfiled Public'));
        return opts;
    }
    
    public List<SelectOption> getEmailTemplateOpts() {
        List<SelectOption> opts = new List<SelectOption>();
        if ( selectedEmailTemplateFolder != null ) {
            opts.add(new SelectOption('null', ' - Select - '));
            Id selectedId = (Id) selectedEmailTemplateFolder;
            for ( EmailTemplate et : allEmailTemplates ) {
                if ( et.FolderId == selectedId )
                    opts.add(new SelectOption(et.Id, et.Name));
            }
        }
        return opts;
    }
    
    public PageReference refreshEmailTemplateSection() {
        if ( selectedEmailTemplateFolder == null || selectedEmailTemplateFolder == 'null' ) {
            selectedEmailTemplateFolder = null;
            selectedEmailTemplate = null;
        }
        if ( selectedEmailTemplate == null || selectedEmailTemplate == 'null' ) {
            selectedEmailTemplate = null;
            chosenEmailTemplate = null;
        } else {
            Id selectedId = (Id) selectedEmailTemplate;
            for ( EmailTemplate et : allEmailTemplates ) {
                if ( et.Id == selectedId ) {
                    chosenEmailTemplate = et;
                    break;
                }
            }
        }
        return null;
    }
    
    public void sendEmail(){
        
        list<opportunity> opplist= [SELECT Id,Contact__c from Opportunity where id in :recordIdSet];
        map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
        list<Messaging.SingleEmailMessage> emailtemp = new List<Messaging.SingleEmailMessage>();
        
        //EmailTemplate templateId = [Select id from EmailTemplate where DeveloperName  = 'Rebooking']; 
        for(id oppId : oppMap.keyset()){
            Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
            // message.setToAddresses(new list <string>(oppMap.Get(oppId).Contact__c));    
            
            message.setTemplateID(chosenEmailTemplate.Id);
            message.setSaveAsActivity(true); // Line no. 84
            message.setWhatId(oppId);
            message.setTargetObjectId(oppMap.Get(oppId).Contact__c);
            message.setTreatTargetObjectAsRecipient(true);
            emailtemp.add(message);
            
        } 
        Messaging.SendEmailResult[] results =Messaging.sendEmail(emailtemp);
        
        for(Messaging.SendEmailResult emailresult : results){
            
            if(emailresult.isSuccess()){
                numberOfSuccessfulMessages++;
            }else{
                for (Messaging.Sendemailerror sendEmailError : emailresult.getErrors()){
                    
                    Apexpages.addMessage(new ApexPages.Message (ApexPages.Severity.ERROR,'Send Email Result Error: ' +sendEmailError.Message));
                }
            }
        }
        if(numberOfSuccessfulMessages >0){
            ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM,'Number of Emails sent Successfully: '+numberOfSuccessfulMessages));
            
        }else{
            ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'NO EMAIL SENT: Something went wrong'));
            numberOfSuccessfulMessages=1;
        }
        /*Integer start = System.Now().millisecond();
        while(System.Now().millisecond()< start+3000){ 
            SendEmailCtrl.redirect();
        }*/
        // return 'done';
        
    }
    public PageReference redirect(){
        PageReference pageRef = new PageReference('/lightning/o/Opportunity/list?filterName=Recent');
        pageRef.setRedirect(true);
        return pageRef;
    }
}

test class ---------------------------->
@isTest 
public class SendEmailCtrl_test { 
    @isTest
    public static void getOpportunityList()
    {
        List<Opportunity> oppList = new List<Opportunity>();
        
        //Insert new Account
        Account accObj = new Account();
        accObj.Name = 'New Account';
        insert accObj;
        
        //insert new contact
        Contact conObj = new Contact();
        conObj.AccountId = accObj.id;
        conObj.LastName ='LName_Test1';
        conObj.FirstName='FName_Test1';
        conObj.Email='FName_Test1@yopmail.com';
        insert conObj;
        
        //Insert new opportunity
        Opportunity oppObj = new Opportunity();
        oppObj.Name = 'Opportunity Name Test1';
        oppObj.AccountId = accObj.id;
        oppObj.StageName = 'Prospecting';
        oppObj.Contact__c = conObj.id;
        oppObj.CloseDate = system.Today()+3;
        insert oppObj;
        oppList.add(oppObj);
       
     //System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.ERROR));
        //System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.CONFIRM));
    
  
        //List<Opportunity> opplist = SendEmailCtrl_test.getOpportunityList();
        Test.startTest();
        ApexPages.StandardSetController stdSetControllerObj = new ApexPages.StandardSetController(opplist);
        stdSetControllerObj.setSelected(opplist);
       
        map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
        SendEmailCtrl obj = new SendEmailCtrl(stdSetControllerObj);
        obj.refreshEmailTemplateSection();
        obj.getEmailTemplateOpts();
        obj.getEmailTemplateFolderOpts();
        obj.redirect();
        obj.sendEmail();
        
        Test.stopTest();    
    }
}

Error----------------->
Attempt to derefrence null object.
Class.SendEmailCtrl.sendEmail: line 84, column 1
Class.SendEmailCtrl_test.getOpportunityList: line 46, column 1

AnyOne can help ?
Akshay ShrivastavaAkshay Shrivastava
Hi Andrew,
Actually error showing at the devloper console when I am testing test class. Not at the time of deployment. 
Akshay ShrivastavaAkshay Shrivastava
Error is resolved.