You need to sign in to do that
Don't have an account?
Test Class Assistance for My First Trigger
Hello! The amazing people in the developer zone at Dreamforce this year inspired me to start learning apex triggers and visualforce (I am a certified admin currently). I have my first trigger completed without errors and now I need to see if it works!! This is very exciting. It seems I need to create a new APEX CLASS to test this trigger (the trigger is below).
I have been reading through the online workbooks but really am not sure how to start the logic on this (except to create new class and use the public class type). Thank you in advance for anyone willing to guide me in the right direction!!!
trigger HPAJunctionAutoRefresh on HPA__c (after update) {
for( HPA__c parent: Trigger.new)
{
//LIST ALL CHILD RECORDS UNDER HPA_JUNCTION OBJECT AND COMPARE TO PARENT EVERY TIME THE HPA_PARENT IS EDITED
//AND UPDATE THE STATUS FIELD ON CHILD HPA_JUNCTION TO MATCH HPA_PARENT SO THAT WORKFLOWS ARE ACTIVATED TO UPDATE THE ACCOUNT
//WHICH IS THE SECOND MASTER-DETAIL RELATIONSHIP TO THE HPA_JUNCTION
List<HPA_Property_Junction__c> children = [ SELECT Id, HPA_Name__c, HPA_Current_Status_Snapshot__c from
HPA_Property_Junction__c where HPA_Name__r.id = :parent.Id];
List<HPA_Property_Junction__c> childrenToUpdate = new List<HPA_Property_Junction__c>();
for(HPA_Property_Junction__c thischild: children )
{
if( thischild.HPA_Current_Status_Snapshot__c != parent.HPA_Current_Status_Text__c)
{
thischild.HPA_Current_Status_Snapshot__c = parent.HPA_Current_Status_Text__c;
childrenToUpdate.add(thischild)
;
}
if( !childrenToUpdate.isEmpty())
{
update childrenToUpdate;
}
}
}
}
Well before you write your test code, you shoud rework your trigger. Right now if you are updating more than 100 or so, probably less you will hit SOQL govenor limits. First for each record in trigger new you are doing a SOQL query and an update. You can only do 100 soql queries per session and 150 dml statements. Also best practice is to not put the actual code inside the trigger but to put in another class and call the method from a trigger handler.
You should be querying for children records for every record in trigger.new at once, not per record.
For test class is should look something like below.
@isTest
public class testHPATrigger{
public testmethod void testupdate(){
//code for creating records and processing values through trigger here.
}
}
Hi,
I dont think your trigger is correct, because your have queried records in the "Loop", which will hit Governer Limit and that'll show you error. because queries are limited in an apex class, check this post
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_gov_limits.htm
and you were updating in that loop too, so that was also gonna make some mess
Like if a user updates 1000 records then your code will show error definetly.
for Test classes you can refer my blog too.
http://abhithetechknight.blogspot.in/2013/10/salesforce-test-class-basics.html
so for that thing you can do something like this
DON'T FORGET THE KUDOS (star)
hi,
update the trigger and respective test method.
trigger HPAJunctionAutoRefresh on HPA__c (after update) {
List<HPA_Property_Junction__c> children = [ SELECT Id, HPA_Name__c, HPA_Current_Status_Snapshot__c from HPA_Property_Junction__c where HPA_Name__r.id = :trigger.newMap.keyset()];
List<HPA_Property_Junction__c> childrenToUpdate = new List<HPA_Property_Junction__c>();
for( HPA__c parent: Trigger.new)
{
//LIST ALL CHILD RECORDS UNDER HPA_JUNCTION OBJECT AND COMPARE TO PARENT EVERY TIME THE HPA_PARENT IS EDITED
//AND UPDATE THE STATUS FIELD ON CHILD HPA_JUNCTION TO MATCH HPA_PARENT SO THAT WORKFLOWS ARE ACTIVATED TO UPDATE THE ACCOUNT
//WHICH IS THE SECOND MASTER-DETAIL RELATIONSHIP TO THE HPA_JUNCTION
for(HPA_Property_Junction__c thischild: children )
{
if( HPA_Name__r.id==parent.Id && thischild.HPA_Current_Status_Snapshot__c != parent.HPA_Current_Status_Text__c)
{
thischild.HPA_Current_Status_Snapshot__c = parent.HPA_Current_Status_Text__c;
childrenToUpdate.add(thischild);
}
}
}
if( !childrenToUpdate.isEmpty())
{
update childrenToUpdate;
}
}
//----------------------------------------------------------------
Hers is you test class
@isTest(seeAllData = false)
private class TestHPAJunctionAutoRefresh {
//Test Method
static testMethod void myTestMethod() {
//Insert HPA__c
HPA__c hpa = new HPA__c( Name = 'test', HPA_Current_Status_Text__c = '12345');
insert hpa;
//Insert HPA_Property_Junction__c
HPA_Property_Junction__c hpProperty = new HPA_Property_Junction__c(Name = 'test' , HPA_Name__r = hpa.Id, HPA_Current_Status_Snapshot__c = 'game');
insert hpProperty;
update hpa;
//Asserts
System.assertEquals(true, hpProperty.HPA_Current_Status_Snapshot__c == '12345' );
}
}