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
Stephanie AkinStephanie Akin 

Help creating test class

Hi. I received help with an apex trigger and have tested it out and it is working but I need a test class in order to push it to production. Any help is appreciated.  Trigger is below:

trigger updateContactSageCaller on Scorecard__c (before insert,before update){
Set<Id> conId = new Set<Id>();
Map<Id,Contact> conMap = new Map<Id,Contact>(); 
    // start SFDC code
    List<Contact> l1 = new List<Contact>();
    // end SFDC code
for(Scorecard__c score : trigger.new){
if(score.Primary_Training_Contact__c != null){
    conId.add(score.Primary_Training_Contact__c);
}
}
for(Contact con : [Select Id,Sage_Caller__c from Contact where Id IN: conId]){
conMap.put(con.Id,con);
}

for(Scorecard__c score : trigger.new){
if(conMap.containsKey(score.Primary_Training_Contact__c) && conMap.containsKey(score.Primary_Training_Contact__c) != null){
conMap.get(score.Primary_Training_Contact__c).Sage_Caller__c = score.Sage_Caller__c;
    //start sfdc code
     l1.add(conMap.get(score.Primary_Training_Contact__c));
    //end sfdc code
}
}
// sfdc code
// if(!conMap.isEmpty()){
if(!l1.isEmpty()){
    update l1;
}
//}

    // start SFDC code
    List<Contact> l2 = new List<Contact>();
    // end SFDC code

for(Scorecard__c score : trigger.new){
if(score.Primary_Training_Contact__c != null){
conId.add(score.Primary_Training_Contact__c);
}
}
for(Contact con : [Select Id,Sage_Caller__c from Contact where Id IN: conId]){
conMap.put(con.Id,con);
}

for(Scorecard__c score : trigger.new){
if(conMap.containsKey(score.Primary_Training_Contact__c) && conMap.containsKey(score.Primary_Training_Contact__c) != null){
conMap.get(score.Primary_Training_Contact__c).Sage_Caller__c = score.Sage_Caller__c;
    //start sfdc code
     l2.add(conMap.get(score.Primary_Training_Contact__c));
    //end sfdc code
}
}
// sfdc code
// if(!conMap.isEmpty()){
if(!l2.isEmpty()){
update l2;
}
}

Thanks!
Best Answer chosen by Stephanie Akin
AshlekhAshlekh
Hi,

Your class can be 
trigger updateContactSageCaller on Scorecard__c (before insert,before update)
{
	Set<Id> conId = new Set<Id>();
	Map<Id,Contact> conMap = new Map<Id,Contact>(); 
    // start SFDC code
    List<Contact> l1 = new List<Contact>();
    // end SFDC code
	for(Scorecard__c score : trigger.new){
		if(score.Primary_Training_Contact__c != null){
			conId.add(score.Primary_Training_Contact__c);
		}
	}
	
	/*for(Contact con : [Select Id,Sage_Caller__c from Contact where Id IN: conId]){
		conMap.put(con.Id,con);
	}*/
	conMap = new Map<Id,Contact>([Select Id,Sage_Caller__c from Contact where Id IN: conId]);

	for(Scorecard__c score : trigger.new)
	{
		if(conMap.containsKey(score.Primary_Training_Contact__c) && conMap.containsKey(score.Primary_Training_Contact__c) != null)
		{
			conMap.get(score.Primary_Training_Contact__c).Sage_Caller__c = score.Sage_Caller__c;
			//start sfdc code
			l1.add(conMap.get(score.Primary_Training_Contact__c));
			//end sfdc code
		}
	}
	// sfdc code
	// if(!conMap.isEmpty()){
	if(!l1.isEmpty()){
		update l1;
	}
	//}

    // start SFDC code
    List<Contact> l2 = new List<Contact>();
    // end SFDC code

	for(Scorecard__c score : trigger.new){
		if(score.Primary_Training_Contact__c != null){
			conId.add(score.Primary_Training_Contact__c);
		}
	}
	
	/*for(Contact con : [Select Id,Sage_Caller__c from Contact where Id IN: conId]){
		conMap.put(con.Id,con);
	}*/
	conMap = new Map<Id,Contact>([Select Id,Sage_Caller__c from Contact where Id IN: conId]);

	for(Scorecard__c score : trigger.new){
		if(conMap.containsKey(score.Primary_Training_Contact__c) && conMap.containsKey(score.Primary_Training_Contact__c) != null){
			conMap.get(score.Primary_Training_Contact__c).Sage_Caller__c = score.Sage_Caller__c;
			//start sfdc code
			l2.add(conMap.get(score.Primary_Training_Contact__c));
			//end sfdc code
		}
	}
	// sfdc code
	// if(!conMap.isEmpty()){
	if(!l2.isEmpty()){
		update l2;
	}
}
Test class
Private class MyTestClass{
private static testmethod void unitTest1()
{
	Test.startTest();
	List<Contact> cons = new List<Contact>();
	cons.add(new Contact(firstname='Test1',lastname='Test'));
	cons.add(new Contact(firstname='Test2',lastname='Test'));
	insert cons;
	Scorecard__c c = new Scorecard__c(name ='testq',Primary_Training_Contact__c=cons[0].id);
	Test.StopTest();
}

}

All Answers

AshwaniAshwani
Please go through following links to write a good test class for trigggers:

http://salesforce.stackexchange.com/questions/24551/test-class-for-after-insert-update-trigger

http://salesforce.stackexchange.com/questions/23560/test-class-for-trigger

You only need to insert record which can fulfil the scenario of trigger execution.
AshlekhAshlekh
Hi,

Your class can be 
trigger updateContactSageCaller on Scorecard__c (before insert,before update)
{
	Set<Id> conId = new Set<Id>();
	Map<Id,Contact> conMap = new Map<Id,Contact>(); 
    // start SFDC code
    List<Contact> l1 = new List<Contact>();
    // end SFDC code
	for(Scorecard__c score : trigger.new){
		if(score.Primary_Training_Contact__c != null){
			conId.add(score.Primary_Training_Contact__c);
		}
	}
	
	/*for(Contact con : [Select Id,Sage_Caller__c from Contact where Id IN: conId]){
		conMap.put(con.Id,con);
	}*/
	conMap = new Map<Id,Contact>([Select Id,Sage_Caller__c from Contact where Id IN: conId]);

	for(Scorecard__c score : trigger.new)
	{
		if(conMap.containsKey(score.Primary_Training_Contact__c) && conMap.containsKey(score.Primary_Training_Contact__c) != null)
		{
			conMap.get(score.Primary_Training_Contact__c).Sage_Caller__c = score.Sage_Caller__c;
			//start sfdc code
			l1.add(conMap.get(score.Primary_Training_Contact__c));
			//end sfdc code
		}
	}
	// sfdc code
	// if(!conMap.isEmpty()){
	if(!l1.isEmpty()){
		update l1;
	}
	//}

    // start SFDC code
    List<Contact> l2 = new List<Contact>();
    // end SFDC code

	for(Scorecard__c score : trigger.new){
		if(score.Primary_Training_Contact__c != null){
			conId.add(score.Primary_Training_Contact__c);
		}
	}
	
	/*for(Contact con : [Select Id,Sage_Caller__c from Contact where Id IN: conId]){
		conMap.put(con.Id,con);
	}*/
	conMap = new Map<Id,Contact>([Select Id,Sage_Caller__c from Contact where Id IN: conId]);

	for(Scorecard__c score : trigger.new){
		if(conMap.containsKey(score.Primary_Training_Contact__c) && conMap.containsKey(score.Primary_Training_Contact__c) != null){
			conMap.get(score.Primary_Training_Contact__c).Sage_Caller__c = score.Sage_Caller__c;
			//start sfdc code
			l2.add(conMap.get(score.Primary_Training_Contact__c));
			//end sfdc code
		}
	}
	// sfdc code
	// if(!conMap.isEmpty()){
	if(!l2.isEmpty()){
		update l2;
	}
}
Test class
Private class MyTestClass{
private static testmethod void unitTest1()
{
	Test.startTest();
	List<Contact> cons = new List<Contact>();
	cons.add(new Contact(firstname='Test1',lastname='Test'));
	cons.add(new Contact(firstname='Test2',lastname='Test'));
	insert cons;
	Scorecard__c c = new Scorecard__c(name ='testq',Primary_Training_Contact__c=cons[0].id);
	Test.StopTest();
}

}

This was selected as the best answer