You need to sign in to do that
Don't have an account?
Problem Creating a test class.
I am trying to create a test class for two trigger I have created. This first trigger is:
trigger Update_ProviderTracking_01 on Task (after update)
{for (Task t:System.Trigger.new)
{if (t.Subject == 'Mail Provider Intro Letter' && t.IsClosed==True) {
Provider_Facility__c PF = new Provider_Facility__c(ID=t.WhatId, Provider_Intro_Letter_Mailed__c = True);
update PF; } }
The test class is:
@isTestclass MyTestClass001 { static testMethod void myUnitTest() { // TO DO: implement unit test DateTime dT = System.now();Date myDate = date.newinstance(dT.year(), dT.month(), dT.day());
Task o = new Task();o.Subject = 'Mail Provider Intro Letter'; //set the required fieldso.WhatId=[select id from Provider_Facility__c limit 1].id;o.Status='Not Interested - Other';//o.priority='Normal';//o.ActivityDate=myDate;//o.assign='Todd Barry';insert o;
o.Status='Complete';update o;
{if (o.Subject == 'Mail Provider Intro Letter'&& o.IsClosed==True) { Provider_Facility__c PF = new Provider_Facility__c(ID=o.WhatId, Provider_Intro_Letter_Mailed__c = True); update PF; }}
}}
and I get 100% coverage
My Second trigger is exactly the same as the first, execpt I am testing for different Task subject:
trigger Update_ProviderTracking_02 on Task (after update)
{for (Task t:System.Trigger.new)
{if (t.Subject == 'Follow Up Call to Intro Letter' && t.IsClosed==True) {
Provider_Facility__c PF = new Provider_Facility__c(ID=t.WhatId, Intro_Letter_Follow_Up_Call_Made__c=True);
update PF; } }
and the test class is
@isTestclass MyTestClass002 { static testMethod void myUnitTest() { // TO DO: implement unit test
Task o = new
Task();o.Subject = 'Follow Up Call to Intro Letter';
o.WhatId=[select id from Provider_Facility__c limit 1].id;
o.Status='Not Interested - Rates';//o.priority='Normal';
insert o;
o.Status='Complete';
update o;
{if (o.Subject == 'Follow Up Call to Intro Letter' && o.IsClosed==True) { Provider_Facility__c PF = new Provider_Facility__c(ID=o.WhatId, Intro_Letter_Follow_Up_Call_Made__c=True); update PF; }}
}}
but this time I only get 50% coverage and it highlights the last line Provider_Facility__c PF = new Provider_Facility__c(ID=o.WhatId, Intro_Letter_Follow_Up_Call_Made__c=True); update PF; in red.
Any ideas why one get 100% and the other only 50%?
It worked for me. The only difference I had to do was around the status field. You have the criteria:
In order for the code to not be entered, the subject either does not equal "Follow Up Call to Intro Letter" or IsClosed equals False. IsClosed is set based on the Status field. By default the "Closed" status is "Completed" not "Complete". Unless you have changed the Statuses in setup to have Complete as a valid closed staus, that is likely the problem.
In that case, I cannot tell you why the first trigger is completely covered. We would have to look to be sure what is happening.
If you are still having issues, please open up a support ticket and we can take a look.
Hope this helps.
Jay
All Answers
It worked for me. The only difference I had to do was around the status field. You have the criteria:
In order for the code to not be entered, the subject either does not equal "Follow Up Call to Intro Letter" or IsClosed equals False. IsClosed is set based on the Status field. By default the "Closed" status is "Completed" not "Complete". Unless you have changed the Statuses in setup to have Complete as a valid closed staus, that is likely the problem.
In that case, I cannot tell you why the first trigger is completely covered. We would have to look to be sure what is happening.
If you are still having issues, please open up a support ticket and we can take a look.
Hope this helps.
Jay
Jay,
Thanks for your help. It's amazing how another set of eyes can make all the difference in the world. I kept changing everything, except for adding the "d" to "complete".
One more question if you'll permit. Is there any way to comibined the two test classes into one? Or does each trigger have to have it's own test class? I have ten triggers to test for all the same with the only difference being the Task subject.
Thanks again,
Todd B.
Glad it worked.
You can defintiely combine the tests into a single test class. All yout would do is create a new test method for each trigger you wanted to test:
Hope this helps.
Jay
Thanks Jay.
Hey Jay,
I have another for you if you are up for it. I am trying to create a new trigger:
and I am getting an error messge that says: Save Error: Viable does not exist: p. But when i type my code and type p. all the fields foe the object show up. So how can p not exist?
Thanks again.
Well...from a quick look, it seems there are a couple of issues:
1. You do not have and actions contained in your for loop. You have to have { and } in conjunction with your for loop to actually do anything. right now, the code loops through the Trigger.new, assigns the record to "p" and then instntly moves to the next in the list. Since "p" is only defined in the for loop context, it does nopt exist when you try and insert p.
2. It does not make sense for you to do an insert p at the end of the code. P is a record that aready exists (it was acted on by the trigger), so even if you do #1 above, you will get an error saying that you cannot set the ID of p. Likely, you want to insert the Provider_Contracting__c record you created.
The final code (from my assumptions above) should be:
Hope this helps.
Jay
Jay,
YOU ARE AWESOME!!!!
As you can probably tell I am a little over my head here with all this code writing!
One last question, if I wanted to hard code a date
What is the proper syntax for entering a date is it Effective_date__c = #01/01/2012# or something else?
Your new Biggest fan,
Todd B.
Todd,
The Date functions are listed at http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#StartTopic=Content/apex_methods_system_date.htm?SearchType=Stem. Datetimes are listed at http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#StartTopic=Content/apex_methods_system_datetime.htm?SearchType=Stem.
If you just want a static Date, use the format YYYY-MM-DD, DateTime uses YYYY-MM-DD HH:MM:SS (note the space between the day and the hour). So you could set Jan 1, 2011 using:
Hope this helps.
Jay