You need to sign in to do that
Don't have an account?
cooldamsel
[Urgent!!!] Test Class for without sharing class
Hi,
I am a newbie in saleforce. Please help me to complete the below one.
I have an apex class which is a without sharing class. I need to write test class for that without sharing class. Whenever i run the test class, the class is getting failed and showing the error as 'Attenmpt to dereference a null object' in the place where am initiating my apex class.
Please help me out.
Regards,
Indhu R
I am a newbie in saleforce. Please help me to complete the below one.
I have an apex class which is a without sharing class. I need to write test class for that without sharing class. Whenever i run the test class, the class is getting failed and showing the error as 'Attenmpt to dereference a null object' in the place where am initiating my apex class.
Please help me out.
Regards,
Indhu R
String json = '{'+
' \"items\": ['+
' {'+
' \"id\": \"pn0\",'+
' \"postalcode\": \"0\",'+
' \"contactnumber\": \"pc0\"'+
' },'+
' {'+
' \"id\": \"pn1\",'+
' \"postalcode\": \"1\",'+
' \"contactnumber\": \"pc1\"'+
' },'+
' {'+
' \"id\": \"pn2\",'+
' \"postalcode\": \"2\",'+
' \"contactnumber\": \"pc2\"'+
' }'+
' ]'+
'}';
All Answers
My apex class is:
public without sharing class EF_RequestedResourceDecisionCriteria{
//Get data from the REquestedresource form field data field
public static void SetDecisionCriteria(EF_Requested__c[] requestedApplications)
{
for (EF_Requested__c r:requestedApplications){
//Parse the Json data
}
//Check if there was any criteria that matched the Criteria defined in Salesforce
//Save the criteria and its data on the RequestedResource Object
}
//method to parse the Json data
public void parseJson(string rrFormData) {
Map<String, Object> root = (Map<String, Object>)JSON.deserializeUntyped(rrFormData);
List<Object> items = (List<Object>)root.get('items');
for (Object item : items) {
Map<String, Object> i = (Map<String, Object>)item;
System.debug(i.get('id'));
}
}
}
The test class i wrote is:
@isTest
public class EF_RequestedResourceDecisionCriteriaTest
{
static testMethod void RequestedResourceDecisionCriteriaTest()
{
EF_Resource_Metadata__c objResourceMetaData = new EF_Resource_Metadata__c(Name='Test Resource Meta Data');
insert objResourceMetaData;
EF_Decision_Criteria__c objDecisionCriteria = new EF_Decision_Criteria__c();
objDecisionCriteria.Name = 'Test Decision Criteria';
objDecisionCriteria.EF_Resource_Metadata__c = objResourceMetaData.id;
objDecisionCriteria.CurrencyIsoCode = 'GBP';
insert objDecisionCriteria;
String json = '{'+
' \"CompanyContacts\": ['+
' {'+
' \"contact\": \"pn0\",'+
' \"postalcode\": \"0\",'+
' \"contactnumber\": \"pc0\"'+
' },'+
' {'+
' \"contact\": \"pn1\",'+
' \"postalcode\": \"1\",'+
' \"contactnumber\": \"pc1\"'+
' },'+
' {'+
' \"contact\": \"pn2\",'+
' \"postalcode\": \"2\",'+
' \"contactnumber\": \"pc2\"'+
' }'+
' ]'+
'}';
Profile p = [SELECT Id FROM Profile WHERE Name='Standard User'];
User u2 = new User(Alias = 'newUser', Email='newuser@testorg.com',
EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US',
LocaleSidKey='en_US', ProfileId = p.Id,
TimeZoneSidKey='America/Los_Angeles', UserName='newuser@testorg.com');
system.runas(u2)
{
EF_RequestedResourceDecisionCriteria objReqResDecCrit = new EF_RequestedResourceDecisionCriteria();
objReqResDecCrit.parseJson(json);
system.assert(objReqResDecCrit != null);
}
}
}
Thanks in advance.
EF_RequestedResourceDecisionCriteria objReqResDecCrit = new EF_RequestedResourceDecisionCriteria();
can you give the complete error message you get when you run the test class ?
The following is the error am getting while running the test.
Time Started 3/13/2014 5:00 AM
Class EF_RequestedResourceDecisionCriteriaTest
Method Name RequestedResourceDecisionCriteriaTest
Pass/Fail Fail
Error Message System.NullPointerException: Attempt to de-reference a null object
Stack Trace Class.EF_RequestedResourceDecisionCriteria.parseJson: line 28, column 1
Class.EF_RequestedResourceDecisionCriteriaTest.RequestedResourceDecisionCriteriaTest: line 40, column 1
Map<String, Object> root = (Map<String, Object>)JSON.deserializeUntyped(rrFormData);
List<Object> items = (List<Object>)root.get('items');
based on your json string, the map root will have the below object. which has CompanyContacts at high level and 3 child nodes..
{
CompanyContacts=(
{contact=pn0, contactnumber=pc0, postalcode=0},
{contact=pn1, contactnumber=pc1, postalcode=1},
{contact=pn2, contactnumber=pc2, postalcode=2})
}
to retrieve the values from the map you have to use the correct key.. otherwise you will end up with null and hence the dereference error..
here is the updated method..
public void parseJson(string rrFormData) {
Map<String, Object> root = (Map<String, Object>)JSON.deserializeUntyped(rrFormData);
List<Object> items = (List<Object>)root.get('CompanyContacts');
for (Object item : items) {
Map<String, Object> i = (Map<String, Object>)item;
System.debug(i.get('contact'));
}
}
Thanks for your suggestion. but the thing is i cant update my apex class. All i can do is change the json value in my test class. Is there a way to know wat json value i should pass to my test class?
String json = '{'+
' \"items\": ['+
' {'+
' \"id\": \"pn0\",'+
' \"postalcode\": \"0\",'+
' \"contactnumber\": \"pc0\"'+
' },'+
' {'+
' \"id\": \"pn1\",'+
' \"postalcode\": \"1\",'+
' \"contactnumber\": \"pc1\"'+
' },'+
' {'+
' \"id\": \"pn2\",'+
' \"postalcode\": \"2\",'+
' \"contactnumber\": \"pc2\"'+
' }'+
' ]'+
'}';
Thanku. It helped me cover 71% code.