I have written a test class for the Schedualble class and the if condition is not getting covered.The code coverage is displaying as 40% .Any Suggestion please.
Schedule Class :
global class ResponseDaysCalulatorScheduler implements Schedulable
{
global void execute(SchedulableContext ctx)
{
CalculateDaysToResponse.UpdateResponseDaysForCampaignMember();
}
}
Test Class :
@Istest
public class CalculateDaysToResponseTest{
public static testmethod void UpdateResponseDaysForCampaignMemberTest(){
Test.startTest();
Date todayDate = system.today();
Lead lea = new lead(lastname='Test',company='test', email='abc@test.com',Approval_flag__c=false,
Approval_Status__c='Pending Approval',Country='USA',Status='Not Contacted');
insert lea;
system.debug('=======================:'+(lea.lastname));
Contact cont = new Contact(FirstName ='Testing' ,LastName='Response Days Calculation');
insert cont;
system.debug('=======================:'+(cont.FirstName));
Campaign camp = new Campaign(Name='testing days',CurrencyIsoCode='USD',Score__c='100',Type='Inquiry',Status='Not Contacted');
insert camp;
system.debug('=======================:'+(camp.Name));
list<CampaignMember> newcampaignmem = new list<CampaignMember>();
CampaignMember campmem = new CampaignMember(Days_to_Response__c=7,CurrencyIsoCode='USD',ContactID=cont.id,CampaignID=camp.Id,
Response_Date__c=Date.Today(),Disqualified_Reason__c='other',LeadId=lea.Id );
newcampaignmem.add(campmem);
system.debug('=======================:'+(campmem.CurrencyIsoCode));
system.debug('=======================:'+(campmem.Response_Date__c));
insert newcampaignmem;
campmem.Days_to_Response__c=7;
update newcampaignmem;
// Test.startTest();
ResponseDaysCalulatorScheduler sh1 = new ResponseDaysCalulatorScheduler();
String sch = '0 0 23 * * ?';
system.schedule('ResponseDaysCalulatorScheduler Check', sch, sh1);
//list<CampaignMember> newcampaignmem = new list<CampaignMember>();
Test.stopTest();
}
public static testmethod void UpdateResponseDaysForCampaignMemberTest1(){
Test.startTest();
Date todayDate = system.today();
Lead lea = new lead(lastname='Test1',company='test', email='abc@test.com',Approval_flag__c=false,
Approval_Status__c='Pending Approval',Country='USA',Status='Not Contacted');
insert lea;
system.debug('&&&&&&&&&&&&&&&&&&:'+(lea.lastname));
Contact cont = new Contact(FirstName ='Testing1' ,LastName='Response Days Calculation');
insert cont;
system.debug('&&&&&&&&&&&&&&&&&&&:'+(cont.FirstName));
Campaign camp = new Campaign(Name='testing days1',CurrencyIsoCode='USD',Score__c='100',Type='Inquiry',Status='Not Contacted');
insert camp;
system.debug('&&&&&&&&&&&&&&&&:'+(camp.Name));
list<CampaignMember> newcampaignmem = new list<CampaignMember>();
CampaignMember campmem = new CampaignMember(Days_to_Response__c=7,CurrencyIsoCode='USD',ContactID=cont.id,CampaignID=camp.Id,
Response_Date__c=Date.Today().addDays(-1),Disqualified_Reason__c='other',LeadId=lea.Id );
newcampaignmem.add(campmem);
system.debug('&&&&&&&&&&&&&&&&&&&&&:'+(campmem.CurrencyIsoCode));
system.debug('&&&&&&&&&&&&&&&&&&&:'+(campmem.Response_Date__c));
insert newcampaignmem;
campmem.Days_to_Response__c=7;
update newcampaignmem;
// Test.startTest();
ResponseDaysCalulatorScheduler sh1 = new ResponseDaysCalulatorScheduler();
String sch = '0 0 23 * * ?';
system.schedule('ResponseDaysCalulatorScheduler Check', sch, sh1);
//list<CampaignMember> newcampaignmem = new list<CampaignMember>();
Test.stopTest();
}
public static testmethod void UpdateResponseDaysForCampaignMemberTest2(){
Test.startTest();
Date todayDate = system.today();
Lead lea = new lead(lastname='Test2',company='test', email='abc@test.com',Approval_flag__c=false,
Approval_Status__c='Pending Approval',Country='USA',Status='Not Contacted');
insert lea;
system.debug('*********************:'+(lea.lastname));
Contact cont = new Contact(FirstName ='Testing2' ,LastName='Response Days Calculation');
insert cont;
system.debug('*****************:'+(cont.FirstName));
Campaign camp = new Campaign(Name='testing2 days',CurrencyIsoCode='USD',Score__c='100',Type='Inquiry',Status='Not Contacted');
insert camp;
system.debug('**********************:'+(camp.Name));
list<CampaignMember> newcampaignmem = new list<CampaignMember>();
CampaignMember campmem = new CampaignMember(Days_to_Response__c=10,CurrencyIsoCode='USD',ContactID=cont.id,CampaignID=camp.Id,
Response_Date__c=Date.Today().addDays(1),Disqualified_Reason__c='other',LeadId=lea.Id );
newcampaignmem.add(campmem);
system.debug('**************:'+(campmem.CurrencyIsoCode));
system.debug('**************:'+(campmem.Response_Date__c));
insert newcampaignmem;
campmem.Days_to_Response__c=0;
update newcampaignmem;
// Test.startTest();
ResponseDaysCalulatorScheduler sh1 = new ResponseDaysCalulatorScheduler();
String sch = '0 0 23 * * ?';
system.schedule('ResponseDaysCalulatorScheduler Check', sch, sh1);
//list<CampaignMember> newcampaignmem = new list<CampaignMember>();
Test.stopTest();
}
}
Class :
public class CalculateDaysToResponse{
public static void UpdateResponseDaysForCampaignMember(){
List<CampaignMember> NewmatchingMembers = new List<CampaignMember> ();
List<CampaignMember> matchingMembers = new List<CampaignMember> ();
if(Test.isRunningTest()) matchingMembers = [SELECT Id, Response_Date__c, Days_to_Response__c, Campaign_Type__c, Lead_Status__c FROM CampaignMember WHERE Response_Date__c != null AND Campaign_Type__c = 'Inquiry'];
else matchingMembers = [SELECT Id, Response_Date__c, Days_to_Response__c, Campaign_Type__c, Lead_Status__c FROM CampaignMember WHERE Response_Date__c != null AND Campaign_Type__c = 'Inquiry' AND Lead_Status__c = 'Not Contacted'];
for(CampaignMember matchingMember : matchingMembers)
{
Date todayDate = system.today();
if(matchingMember.Response_Date__c < todayDate)
{
Integer diff = matchingMember.Response_Date__c.daysBetween(date.valueof(Date.today()));
matchingMember.Days_to_Response__c = diff;
} else {
matchingMember.Days_to_Response__c = 0;
}
NewmatchingMembers.add(matchingMember);
}
update NewmatchingMembers ;
}
}
Any Suggestion very much appreciated.
Date.Today().addDays(-1)you need a test withDate.Today().addDays(1). – Keith C Mar 09 '16 at 12:28Response_Date__cto have todays date in one test method. In the next test method it should haveDate.Today().addDays(-1)and the last one should haveDate.Today().addDays(1)– Prady Mar 09 '16 at 12:47CalculateDaysToResponse.UpdateResponseDaysForCampaignMember();, and then the behaviour of the method itself. I would turn that into 2 different test classes, but if you're testing the behaviour of yourCalculateDaysToResponseclass, there's no need to schedule it. – mkorman Mar 09 '16 at 13:03//*** Start Not Covered ***//and//*** End Not Covered ***//so we can give you more specific direction on how to solve your issues. – crmprogdev Mar 09 '16 at 15:00diffto be= 0,Response_Date__cin your test data must =today(), correct? You must cover both theIfand theelseconditions to increase your code coverage. With the correct data, that should be happening. If you used more than one lead with diff values in the same method, it would. You don't know if it is, because you have no debug statements. See How do I start to debug my own Apex code?. – crmprogdev Mar 09 '16 at 17:06