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
Mohmad SohelMohmad Sohel 

Test class for Controller Extension

Hi All,
Kindly help me on writing test class for below Standard Controller Extension. Currently I am getting 47 % code coverage.

Controller:
public class SpeakerControllerExtension {

    public blob picture { get; set; }
    public String errorMessage { get; set; }

    private final Speaker__c speaker;
    private ApexPages.StandardController stdController;

    public SpeakerControllerExtension(ApexPages.StandardController stdController) {
        this.speaker = (Speaker__c)stdController.getRecord();
        this.stdController = stdController;
    }

    public PageReference save() {
        errorMessage = '';
        try {
            upsert speaker;
            if (picture != null) {
                Attachment attachment = new Attachment();
                attachment.body = picture;
                attachment.name = 'speaker_' + speaker.id + '.jpg';
                attachment.parentid = speaker.id;
                attachment.ContentType = 'application/jpg';
                insert attachment;
                speaker.Picture_Path__c = '/servlet/servlet.FileDownload?file='
                                          + attachment.id;
                update speaker;
            }
            return new ApexPages.StandardController(speaker).view();
        } catch(System.Exception ex) {
            errorMessage = ex.getMessage();
            return null;
        }
    }
}

Test class: 

@isTest
public class Test_SpeaketControllerExtension {
     static  testMethod void testSave(){
         
        
        Speaker__c sp = new Speaker__c(); // Speaker__c is Standard Controller
        insert sp;
       
        ApexPages.StandardController controller = new ApexPages.StandardController(sp);
       
        SpeakerControllerExtension extension = new SpeakerControllerExtension(controller); // controller extension
        extension.save();
        
        PageReference pageRef = Page.SpeakerForm; // SpeakerForm is visualforce page
        
        Test.setCurrentPageReference(pageRef);
    }
}

Thanks in advance
Best Answer chosen by Mohmad Sohel
Neetu_BansalNeetu_Bansal
Hi Mohmad,

You need to set picture value in your test class, to achieve the test class coverage like below:
@isTest
public class Test_SpeaketControllerExtension
{
	static  testMethod void testSave()
	{
		Speaker__c sp = new Speaker__c(); // Speaker__c is Standard Controller
        insert sp;
       
        ApexPages.StandardController controller = new ApexPages.StandardController(sp);
        SpeakerControllerExtension extension = new SpeakerControllerExtension(controller); // controller extension
		
		extension.picture = Blob.valueOf('Test');
        extension.save();
        
        PageReference pageRef = Page.SpeakerForm; // SpeakerForm is visualforce page
        Test.setCurrentPageReference(pageRef);
    }
}
Let me know, if you need any other help.

Thanks,
Neetu

All Answers

Neetu_BansalNeetu_Bansal
Hi Mohmad,

You need to set picture value in your test class, to achieve the test class coverage like below:
@isTest
public class Test_SpeaketControllerExtension
{
	static  testMethod void testSave()
	{
		Speaker__c sp = new Speaker__c(); // Speaker__c is Standard Controller
        insert sp;
       
        ApexPages.StandardController controller = new ApexPages.StandardController(sp);
        SpeakerControllerExtension extension = new SpeakerControllerExtension(controller); // controller extension
		
		extension.picture = Blob.valueOf('Test');
        extension.save();
        
        PageReference pageRef = Page.SpeakerForm; // SpeakerForm is visualforce page
        Test.setCurrentPageReference(pageRef);
    }
}
Let me know, if you need any other help.

Thanks,
Neetu
This was selected as the best answer
Mohmad SohelMohmad Sohel
Thank You Neetu. Now I got 86 % code coverage.
Neetu_BansalNeetu_Bansal
Hi Mohmad,

Its little bit tricky to cover the exception part of code, you can only cover this, if you have a validation rule on speaker, so that you intentionally create such data which throws error while upserting speaker.

Although its not compulsory to cover this part.

Thanks,
Neetu
Mohmad SohelMohmad Sohel
Thank You Neetu Bansal.