You need to sign in to do that
Don't have an account?
Dave Berenato
getParameters is showing as null in Test Class
I have an Apex Class that pulls a UserID using getParameters. It works in the Visualforce page but in the Test Class it shows as "System.QueryException: invalid ID field: null"
With the following Test Class that I confirmed can Pass if I delete the getParameters section and replace the "myParam" in "myRequest" with "UserInfo.getUserId()".
public with sharing class TelemarketerDialing { public TelemarketerDialing(){ if(ApexPages.currentpage().getParameters().get('leadgenerator') == null){ myParam = UserInfo.getUserId(); } else{ myParam = ApexPages.currentpage().getParameters().get('leadgenerator'); } } public String myParam {get; set;} public String sortOrder = ' Last_Call__c '; public String ascendingOrDescending = ' ASC '; public String myRequest = ' SELECT id, Name, FirstName, LastName, Last_Call__c,Phone,Email,MobilePhone,Second_Property_Owner__c,Age__c,Equity_Dollar__c,'+ ' Actual_Sale_Date__c, Foreclosure_Status__c, Total_Calls_Live__c, Distance_from_FAIR_Program__c, Number_of_Phone_Numbers__c,Equity_Percentage__c,'+ ' Property_Address__c,Property_City__c,Property_State__c,Property_Zip_Code__c,Verified_Lender__c,Prospecting_Criteria__c,'+ ' Language_Spoken_at_Home__c,Total_Talk_Time_minutes__c,Combined_LTV_Ratio__c,'+ ' Account.Id,Account.View_Note_URL__c,Account.New_Note_URL__c '+ ' FROM Contact '+ ' WHERE Contact_Stage__c = \'Dialing\' AND Prospecting_Criteria__c = TRUE AND OwnerId = \'' + myParam + '\' ORDER BY '; List<Contact> contacts; public List<Contact> getContacts() { contacts = new List<Contact>(); contacts = Database.query(myRequest + sortOrder + ascendingOrDescending); return contacts;} public void saveAndReturn() { update contacts; } }
With the following Test Class that I confirmed can Pass if I delete the getParameters section and replace the "myParam" in "myRequest" with "UserInfo.getUserId()".
@isTest public class TelemarketerDialingTest { static testMethod void TestDialing(){ Account testaccount = new Account(); testaccount.name = '123 Test Drive'; testaccount.RecordTypeId = '0126A0000004Qo4'; testaccount.APN__c = '123'; testaccount.Foreclosure_Status__c = 'Auction'; testaccount.Property_Zip_Code__c = '90001'; insert testaccount; system.debug(testaccount.id); Contact testcontact = new Contact(); testcontact.Contact_Stage__c = 'Dialing'; testcontact.Phone_1__c = '6106754043'; testcontact.Accountid = testaccount.id; testcontact.LastName = 'Dave'; testcontact.OwnerId = UserInfo.getUserId(); testcontact.RecordTypeId = '0126A0000004QlU'; insert testcontact; TelemarketerDialing td = new TelemarketerDialing(); List<Contact> list1 = td.getContacts(); td.saveAndReturn(); system.assertEquals(1, list1.size()); } }
dev_arya was right but as usual with your question, there is often a "surprise" (and that could be a good question in a quizz).
Probably already solved nevertheless here is a solution (among many other ways).
When myRequest is evaluated, myParam is null.
When the value of myParam is initialized into the constructor, myRequest is not re-evaluated so myParam is still null into myRequest until its use by the method getContacts.
public String myRequest {get; set;}
Alain
All Answers
The test class in Apex does not have a context to the current page hence getCurrent().getParameter() does not work. You need to explicitly set the page and provide the parameter to ur test class before you call the controller method to be tested: Hope this helps.
Cheers,
Dev
I still got the same error: System.QueryException: invalid ID field: null
dev_arya was right but as usual with your question, there is often a "surprise" (and that could be a good question in a quizz).
Probably already solved nevertheless here is a solution (among many other ways).
When myRequest is evaluated, myParam is null.
When the value of myParam is initialized into the constructor, myRequest is not re-evaluated so myParam is still null into myRequest until its use by the method getContacts.
public String myRequest {get; set;}
Alain
public String myRequest {get; set;} // myRequest never used outside getContacts() nor on the screen (sometimes the query is shown for debugging) There are many alternatives.Alain
I will have my own projects in github at the end of the year I hope but right now, I am just very pleased that I could help some grateful people like you here (even a little) (... and push up the counter up to 5,000 points perhaps (a very difficult challenge)).
By the way, your questions are often surprising because even if your code is short, there are little traps that we don't see sometimes at first glance.
Have a nice evening.
Alain