You need to sign in to do that
Don't have an account?
Test Class Help: System.NullPointerException: Attempt to de-reference a null object
Please help, I have 50% coverage for the trigger below. However, I am receiving the following error and nor do I know if I'm writing the correct test class:
System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, RollupEnrollmentCount: execution of AfterInsert
caused by: System.NullPointerException: Attempt to de-reference a null object
Trigger.RollupEnrollmentCount: line 43, column 1: []
_____________________________
trigger RollupEnrollmentCount on DJEnrollment__c (after insert, after update, after delete) {
Set<Id> CampaignIds = new Set<Id>();
if(Trigger.isDelete) {
for(DJEnrollment__c test:Trigger.Old) {
CampaignIds.add(test.EnrollClass_Name__c);
}
}
else
if(Trigger.isUpdate) {
for(DJEnrollment__c test:Trigger.New) {
CampaignIds.add(test.EnrollClass_Name__c);
}
for(DJEnrollment__c test:Trigger.Old) {
CampaignIds.add(test.EnrollClass_Name__c);
}
}
else
{
for(DJEnrollment__c test:Trigger.New) {
CampaignIds.add(test.EnrollClass_Name__c);
}
}
AggregateResult[] groupedResults = [SELECT count(id)enrollmentCount, EnrollClass_Name__c FROM DJEnrollment__c WHERE EnrollClass_Name__c in :CampaignIds GROUP BY EnrollClass_Name__c];
Map<id,Campaign> campaignMap = new Map<Id,Campaign>([SELECT id, Class_Total_Enrollments__c FROM Campaign WHERE Id in :CampaignIds]);
for(AggregateResult ar: groupedResults) {
campaignMap.get((Id)ar.get('EnrollClass_Name__c')).Class_Total_Enrollments__c = (decimal) ar.get('enrollmentcount');
}
try {
update campaignMap.values();
} catch(DmlException e) {
System.debug(e.getMessage());
}
}
System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, RollupEnrollmentCount: execution of AfterInsert
caused by: System.NullPointerException: Attempt to de-reference a null object
Trigger.RollupEnrollmentCount: line 43, column 1: []
_____________________________
trigger RollupEnrollmentCount on DJEnrollment__c (after insert, after update, after delete) {
Set<Id> CampaignIds = new Set<Id>();
if(Trigger.isDelete) {
for(DJEnrollment__c test:Trigger.Old) {
CampaignIds.add(test.EnrollClass_Name__c);
}
}
else
if(Trigger.isUpdate) {
for(DJEnrollment__c test:Trigger.New) {
CampaignIds.add(test.EnrollClass_Name__c);
}
for(DJEnrollment__c test:Trigger.Old) {
CampaignIds.add(test.EnrollClass_Name__c);
}
}
else
{
for(DJEnrollment__c test:Trigger.New) {
CampaignIds.add(test.EnrollClass_Name__c);
}
}
AggregateResult[] groupedResults = [SELECT count(id)enrollmentCount, EnrollClass_Name__c FROM DJEnrollment__c WHERE EnrollClass_Name__c in :CampaignIds GROUP BY EnrollClass_Name__c];
Map<id,Campaign> campaignMap = new Map<Id,Campaign>([SELECT id, Class_Total_Enrollments__c FROM Campaign WHERE Id in :CampaignIds]);
for(AggregateResult ar: groupedResults) {
campaignMap.get((Id)ar.get('EnrollClass_Name__c')).Class_Total_Enrollments__c = (decimal) ar.get('enrollmentcount');
}
try {
update campaignMap.values();
} catch(DmlException e) {
System.debug(e.getMessage());
}
}
You need to apply the null check for map like in line 43 here or you need to ensure that your data is inserted corectly in your test class:
Try this and let me know if it helps.
Regards
Medhya Mahajan
All Answers
You need to apply the null check for map like in line 43 here or you need to ensure that your data is inserted corectly in your test class:
Try this and let me know if it helps.
Regards
Medhya Mahajan
The code is below:
Try this :
Hope this helps.
Regards
Medhya Mahajan