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
Shawn Reichner 29Shawn Reichner 29 

Test class for Visualforce Extension

Hello all Awesome Developers!

I have a visualforce page using an extension that populates a lookup field and does a custom save to redirect to another Visualforce page. 

My stuggle is that I am newer to APEX coding and I do not know how to attempt a test class to make my extension class pass code coverage. 

Can anyone help please? 

Visualforce Page:
<apex:page standardController="Salesforce_Support_Survey__c" sidebar="false" showHeader="false" extensions="SalesforceSupportSurveyController" docType="html-5.0">
   
    <style>
    html, body, p { 
        font-family: "ProximaNovaSoft-Regular", Calibri, 
            "Gill Sans", "Gill Sans MT", Candara, Segoe, 
            "Segoe UI", Arial, sans-serif; 
        font-size: 110%;
    }
    input { font-size: 95%; }
	</style>
    
    <apex:form >
        <apex:pageBlock title="Thank you for taking our short survey!" mode="edit">
            <apex:pageBlockButtons >
                <apex:commandButton action="{!save}" value="Submit Survey"/>
            </apex:pageBlockButtons>
            <apex:pageBlockSection title="Survey Questions:" columns="2">
                <apex:outputField value="{!Salesforce_Support_Survey__c.X1_Timliness__c}"/>
                <apex:inputField value="{!Salesforce_Support_Survey__c.X1_Answer__c}"/>
                <apex:outputField value="{!Salesforce_Support_Survey__c.X2_Satisfaction__c}"/>
                <apex:inputField value="{!Salesforce_Support_Survey__c.X2_Answer__c}"/>
                <apex:outputField value="{!Salesforce_Support_Survey__c.X3_Submission_process__c}"/>
                <apex:inputField value="{!Salesforce_Support_Survey__c.X3_Answer__c}"/>
                <apex:outputField value="{!Salesforce_Support_Survey__c.X4_Enhancement_Ideas__c}"/>
                <apex:inputField value="{!Salesforce_Support_Survey__c.X4_Answer__c}"/>
                <apex:outputField value="{!Salesforce_Support_Survey__c.X5_Additional_Comments__c}"/>
                <apex:inputField value="{!Salesforce_Support_Survey__c.X5_Answer__c}"/>
                <apex:outputField value="{!Salesforce_Support_Survey__c.Issue__c}"/>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>

Extension Class that Test class is needed for:

public class SalesforceSupportSurveyController
{
   Salesforce_Support_Survey__c Issue {get;set;}

    //constructor
    public SalesforceSupportSurveyController(ApexPages.StandardController stdController){
        Issue = (Salesforce_Support_Survey__c)stdController.getRecord();
        Issue.Issue__c = ApexPages.currentPage().getParameters().get('lookupVal');
    }

    public PageReference save(){
        insert Issue;
        
        PageReference reRend = new PageReference('/apex/ThankYou');
        reRend.setRedirect(true);
        return reRend;
    }
}

Thank you all for your help in getting me past this, I really appreciate it,

Shawn
Best Answer chosen by Shawn Reichner 29
Amit Chaudhary 8Amit Chaudhary 8
Hi Shawn,

NOTE:-
1) You dnt need to create Salesforce_Support_Survey__c object record as same will created in save method.
2) You need to create Issue__c object base on data type to populate below value
Issue.Issue__c = ApexPages.currentPage().getParameters().get('lookupVal');



try to update your code like below
@isTest 
public class SalesforceSupportSurveyControllerTest 
{
	static testMethod void testMethod1() 
	{
	
		
		Issue__c issuObj= new Issue__c();
		// add all required value;
		insret issuObj;
			
		Salesforce_Support_Survey__c sss = new Salesforce_Support_Survey__c();
			sss.Name='Test Survey' ;
			// Add all Required field here
		// No need to insert Salesforce_Support_Survey__c record.

			
		Test.StartTest(); 
		
			//NOTE:- Create Issue__c  object in your test class 
			ApexPages.currentPage().getParameters().put('lookupVal',String.valueOf(issuObj.Id));
			
			ApexPages.StandardController sc = new ApexPages.StandardController(sss);
			SalesforceSupportSurveyController sssController = new SalesforceSupportSurveyController(sc);
			sssController.save();
			
		Test.StopTest();
		
	}
}
Let us know if this will help you
 

All Answers

Harish RamachandruniHarish Ramachandruni
Hi ,
@isTest 
public class helptest{
    static testMethod void helpmethode() {

Salesforce_Support_Survey__c  sr = new Salesforce_Support_Survey__c ();

sr.name = 'test';

//add remainning fields



ApexPages.StandardController std = new ApexPages.StandardController(sr);


SalesforceSupportSurveyController cr = new SalesforceSupportSurveyController(std);


cr.save();





}
}





 
Shawn Reichner 29Shawn Reichner 29
Hello Hemant, Thank you for your suggestion, I am getting the follwoing error upon testing. Can you please help to correct?

Error:

System.DmlException: Insert failed. First exception on row 0 with id a1nS0000000TaqQIAS; first error: INVALID_FIELD_FOR_INSERT_UPDATE, cannot specify Id in an insert call: [Id]

Stack trace:

Class.SalesforceSupportSurveyController.save: line 12, column 1
Class.SalesforceSupportSurveyControllerTest.testMethod1: line 19, column 1 
Amit Chaudhary 8Amit Chaudhary 8
Hi Shawn,

NOTE:-
1) You dnt need to create Salesforce_Support_Survey__c object record as same will created in save method.
2) You need to create Issue__c object base on data type to populate below value
Issue.Issue__c = ApexPages.currentPage().getParameters().get('lookupVal');



try to update your code like below
@isTest 
public class SalesforceSupportSurveyControllerTest 
{
	static testMethod void testMethod1() 
	{
	
		
		Issue__c issuObj= new Issue__c();
		// add all required value;
		insret issuObj;
			
		Salesforce_Support_Survey__c sss = new Salesforce_Support_Survey__c();
			sss.Name='Test Survey' ;
			// Add all Required field here
		// No need to insert Salesforce_Support_Survey__c record.

			
		Test.StartTest(); 
		
			//NOTE:- Create Issue__c  object in your test class 
			ApexPages.currentPage().getParameters().put('lookupVal',String.valueOf(issuObj.Id));
			
			ApexPages.StandardController sc = new ApexPages.StandardController(sss);
			SalesforceSupportSurveyController sssController = new SalesforceSupportSurveyController(sc);
			sssController.save();
			
		Test.StopTest();
		
	}
}
Let us know if this will help you
 
This was selected as the best answer