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
vijay kumar kvijay kumar k 

please help me to write test class of my controller

my apex class :
public class copycontact {
    public list<selectoption>account1{set;get;}
    public list<selectoption>account2{set;get;}
    public list<contact>oldcontacts{set;get;}
    public list<opportunity>oldopportinities {set;get;}
    public list<lead>oldleads {set;get;}
    public id selectedaccountId1 {set;get;}
    public id selectedaccountId2 {set;get;}
    public copycontact(ApexPages.StandardController stdController){
        
    }
    public List<SelectOption> getListOfAccounts1()
    {
        List<Account> AccountList1 = [select id,Name from Account] ;
        System.debug('Accounts'+AccountList1.size());
        account1 = new List<SelectOption>();
        account1.add(new SelectOption( ' ' ,'---Select---'));
        for(Account acc : AccountList1 )
        {
            account1.add(new SelectOption(acc.id , acc.Name));
        }
        return account1 ;         
    }
    public List<SelectOption> getListOfAccounts2()
    {
        List<Account> AccountList2 = [select id,Name from Account] ;
        System.debug('Accounts'+AccountList2.size());
        account2 = new List<SelectOption>();
        account2.add(new SelectOption( ' ' ,'---Select---'));
        for(Account acc : AccountList2 )
        {
            account2.add(new SelectOption(acc.id , acc.Name));  
        }
        system.debug('java');
        return account2 ;  
    } 
    public  void clonecontacts(){
        system.debug('gsvdd');
        if(selectedaccountId1!=null){
            oldcontacts=new list<contact>([select id,lastname from contact where accountid=:selectedaccountId1]);
            
            if(oldcontacts.size()==0){
                system.debug('please select create contacts'   );
                ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error,'No contacts to display'));
            }
            else{
                system.debug('oldcontacts'+oldcontacts.size());
                list<contact> newcontacts=new list<contact>();
                list<opportunity> newopportunities=new list<opportunity>();
                set<id> oldcontactid=new set<id>();
                map<id,id> newmap=new map<id,id>();
                for(Contact con:oldcontacts){
                    contact c=new contact();
                    c.lastname=con.LastName;
                    c.AccountId=selectedaccountId2;
                    newcontacts.add(c);
                    oldcontactid.add(con.id);
                }
                insert newcontacts;
                system.debug('newcontacts'+newcontacts.size());
                ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM,'successfully contacts are copied'));
                for(contact c1:oldcontacts){
                    for(contact c2:newcontacts){
                        if(c1.lastname==c2.LastName){
                            newmap.put(c1.id,c2.id); 
                            system.debug('created map');
                        }
                    }
                }
                
                oldopportinities=[select id,name,copycontact__c,closedate,stagename from opportunity where copyContact__c=:oldcontactid];
                system.debug('oldopportunities'+oldopportinities.size());
                list<lead> newleads=new list<lead>();
                set<id> oldleadids=new set<id>();
                map<id,id> newleadmap=new map<id,id>();
                for(opportunity o:oldopportinities){
                    opportunity op=new opportunity();
                    op.Name=o.name;
                    op.CloseDate=o.CloseDate;
                    op.StageName=o.StageName;
                    op.copyContact__c=newmap.get(o.copyContact__c);
                    newopportunities.add(op);
                    oldleadids.add(o.Id);    
                }
                insert newopportunities;
                system.debug('newopportunity'+newopportunities.size());
                system.debug('oldleadsids'+oldleadids.size());
                ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM,'successfully opportunities are copied'));
                for(opportunity o1:oldopportinities){
                    for(opportunity o2:newopportunities){
                        if(o2.name==o1.name){
                            newleadmap.put(o1.id,o2.id);
                        }
                    }
                }
                oldleads=[select id,lastname,Company,status,Opportunityleads__c from lead where Opportunityleads__c=:oldleadids];
                system.debug('oldleads'+oldleads.size());
                if(oldleads.size()==0){
                    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.error,'no opportunites '));
                }
                else{
                    for(lead le:oldleads){
                        lead l=new lead();
                        l.lastName=le.lastname;
                        l.Company=le.company;
                        l.Status=le.status;
                        l.Opportunityleads__c=newleadmap.get(le.Opportunityleads__c);
                        newleads.add(l);
                    }
                    insert newleads;
                    system.debug('newleads'+newleads.size());
                    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM,'successfully leads are copied'));
                }
            }
        }
    }
}
María Angelica BuffaMaría Angelica Buffa
Hi Vijay, 

When you have to test a controller there are a few steps that you have to perform. This example ilustrate those steps: https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_error_handling.htm

Brief explanation of the example: 
1. Specify the page you will test:

PageReference pageRef = Page.success;
Test.setCurrentPage(pageRef);

2. Create an instance of your controller:

Thecontroller controller = new Thecontroller();

3. Invoke the methods defined in your controller. 

controller.setLastName('lastname');
controller.setFirstName('firstname');
controller.setCompany('acme');
controller.setEmail('firstlast@acme.com');
nextPage = controller.save().getUrl();

4. Check if the results are correct. 

System.assertEquals('/apex/success', nextPage);

You can also take a look at these resources:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing.htm
https://developer.salesforce.com/page/How_to_Write_Good_Unit_Tests
https://trailhead.salesforce.com/en/modules/apex_testing/units/apex_testing_intro

Let me know if this helps you,
Angélica.-
Amit Chaudhary 8Amit Chaudhary 8
I will recommend you to start using trailhead to learn about test classes
1) https://trailhead.salesforce.com/modules/apex_testing

Pleasse check below post sample test class
1) http://amitsalesforce.blogspot.com/2015/06/best-practice-for-test-classes-sample.html

Also please check below post
1) https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_qs_test.htm
2) https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_example.htm

You write a test class for this the same way that you would any other:
- Set up some data for the controller to access (in this case it looks like Account ,Contact ,Lead and Opportunity)
- Instantiate the controller - as its custom you don't need to pass any parameters
- Execute a method/methods
- Verify the behaviour with asserts.

Sample Test class for you to start
Sample test class for you
@isTest
private class copycontactTest {
    static TestMethod void myUnitTest()
    {
        Account acc = new Account();
        acc.Name ='Test';
        // Add all required field
        insert acc;
        
        Contact cont = new Contact();
        cont.LastName ='Test';
        cont.accountId = acc.id;
        insert cont;
        
			
		
        Opportunity testOpportunity = new Opportunity(
            Name = 'Test Opportunity Triggers',
            CloseDate = System.today(),       
            StageName = 'Sourcing Demand',
            accountId = acc.id,
            copyContact__c = cont.id
        );
        insert testOpportunity;

		lead leadObj = new lead ();
			leadObj.lastName ='Test';
			leadObj.Opportunityleads__c =testOpportunity.id;
			// add all required field
		insert leadObj;
        
        System.Test.startTest();

			copycontact  obj = new copycontact();
			List<SelectOption> lstAccSelectOpp1 = obj.getListOfAccounts1();
			List<SelectOption> lstAccSelectOpp2 = obj.getListOfAccounts2();
			
			obj.clonecontacts();
			obj.selectedaccountId1 = acc.id;
			obj.selectedaccountId2 = acc.id;
			obj.clonecontacts();
        
        System.Test.stopTest();
    }

}

Let us know if this will help you
 
Raj VakatiRaj Vakati
Use this code and add all requried fileds and relation ships data 
@isTest
private class copycontactTest {
    
    static TestMethod void myUnitTest()
    {
        Account acc = new Account();
        acc.Name ='Test';
        // Add all required field
        insert acc;
        
        Contact cont = new Contact();
        cont.LastName ='Test';
        cont.accountId = acc.id;
        insert cont;
        
        Opportunity testOpportunity = new Opportunity(
            Name = 'Test Opportunity Triggers',
            CloseDate = System.today(),       
            StageName = 'Sourcing Demand',
            accountId = acc.id,
            copyContact__c = cont.LastName
        );
        insert testOpportunity;
        
        Lead l = new Lead();
        //add fields
        
        insert l ;
        
        System.Test.startTest();
        
        ApexPages.StandardController sc = new ApexPages.StandardController(cont);
        
        copycontact  obj = new copycontact(sc);
        List<SelectOption> lstAccSelectOpp1 = obj.getListOfAccounts1();
        List<SelectOption> lstAccSelectOpp2 = obj.getListOfAccounts2();
        
        obj.clonecontacts();
        obj.selectedaccountId1 = acc.id;
        obj.clonecontacts();
        
        
        System.Test.stopTest();
    }
     
}