You need to sign in to do that
Don't have an account?
karol.freeberg
Apex trigger testing problem.
I have a very simple trigger to do an update to a field called CTS_Rep__c. It is on a custom object and the trigger updates the field from the account object. The code is below.
As you can see by the debug log, the ID for the CTS_Rep__c is null. It pulls the correct data in name field so I know on my select statement that I am getting the correct record but again the CTS_Rep__c is null. Can anyone explain to me what I am doing wrong and how to correct the problem. Thank you.
trigger TOR_Update_CTS_Rep on Trial_Order_Request__c (before update, before insert) { //This trigger updates the CTS_Rep__c field from the Account CTS_Rep__c Field. //The lookup to account is based on the TOR field called Consignee_Ship_To_Name__c. //Note: By using the "before" trigger to modify the Trigger.new objects, you don't need // to explicitly perform an update DML statement. When the trigger ends, it will implicitly // update the data as you have modified the values For (Trial_Order_Request__c newTOR : Trigger.new) { Account acc = [Select ID, CTS_Rep__c from Account Where ID =: newTOR.Consignee_Ship_To_Name__c Limit 1]; newTOR.CTS_Rep__c = acc.CTS_Rep__c; System.debug('In Trigger new tor= ' + newTOR.CTS_Rep__c); } //End for Loop } //End of triggerThe trigger works fine on inserts and updates but when I wrote my test and ran that I ran into some problems. I am not getting the CTS_Rep__c field filled in. The trigger does not seem to save the data. My test code is below.
@ISTest public class TOR_CTS_Rep_Test { testMethod private static void runtests(){ //In order for this test to work the three users Finance, Test User, and SysAdmin //must be opened and saved in prod so agent will get those last modified!!! //Also, Finance user contact created must = true and marked as an inactive user. //SysAdmin and Test User contact created field must = false and marked active. //create users List<User> theusers = Create_Accts_Contacts_From_Users_Test.buildUsers(); //Use user0 for the account owner User User0 = theusers[0]; //Use user2 for the CTS Rep User User2 = theusers[2]; //create Account Account testacct = NewObjFactory.buildTestAcct(0, 'ABC Company', User0.id); testacct.CTS_Rep__c = user2.id; System.debug('acct CTS Rep = ' + testacct.CTS_Rep__c); insert testacct; String theTORID; Test.startTest(); // Create the Trial Order Request to test the insert of a new TOR with CTS Rep Trial_Order_Request__c TOR = NewObjFactory.buildtestTOR(0, testacct.id); insert TOR; theTORID=TOR.id; Test.stopTest(); System.debug('TOR CTS Rep = ' + TOR.CTS_Rep__c); //check to see if cts rep was added Trial_Order_Request__c TOR1 = [Select id, name, CTS_Rep__c from Trial_Order_Request__c where ID =: theTORID ]; System.debug('TOR1 = ' + TOR1.CTS_Rep__c); System.debug('TOR = ' + TOR.CTS_Rep__c); System.debug('TOR1 Name = ' + TOR1.Name); System.assertEquals(TOR1.CTS_Rep__c,TOR.CTS_Rep__c); } //End runtests } //End testWhen I run debug does not show the CTS_Rep__c as having any data. Below is the debug log.
As you can see by the debug log, the ID for the CTS_Rep__c is null. It pulls the correct data in name field so I know on my select statement that I am getting the correct record but again the CTS_Rep__c is null. Can anyone explain to me what I am doing wrong and how to correct the problem. Thank you.
CTS_Rep__c is null for TOR not for TOR1 and similarly name is coming null because of TOR. It is happening because after inerting TOR you have queried on it and getting in form of TOR1 so you can find values in fields of TOR1 instance not in TOR. even TOR and TOR1 are same thing but in different -2 instance mode.
Thanks
Sandeep Singhal
http://www.codespokes.com/
All Answers
CTS_Rep__c is null for TOR not for TOR1 and similarly name is coming null because of TOR. It is happening because after inerting TOR you have queried on it and getting in form of TOR1 so you can find values in fields of TOR1 instance not in TOR. even TOR and TOR1 are same thing but in different -2 instance mode.
Thanks
Sandeep Singhal
http://www.codespokes.com/