You need to sign in to do that
Don't have an account?
how to get 75% test coverage
Hi, Any one please help me for getting 75% code coverage, I am getting 71% code coverage. I tried a lot but not getting.
My Class is:
}
global class scheduledmonthlyTaskJobScheduler
{
public string times{set;get;}
global void scheduledmonthlyTaskJobScheduler()
{
}
public static void start()
{
string ctname;
id jobid1;
for(Testscheduling__c ct:[select name from Testscheduling__c ])
ctname=ct.name;
system.debug(ctname+'123@@@@@@@@');
if(ctname!=null || ctname!='')
{
for(crontrigger ctr :[select id,CronExpression from crontrigger where id=:ctname])
{
if(ctr!=null)
jobid1=ctr.id;
system.debug(ctr+'########'+jobid1);
System.abortJob(jobid1);
}
}
list<Testscheduling__c> tt= new list<testscheduling__c>([select id from testscheduling__c]);
if(tt.size()>0)
delete tt;
Schedule_Time__c stc = Schedule_Time__c.getinstance();
if(stc.Date_Time__c!=null)
{
string str = string.valueof(stc.Date_Time__c);
String[] myDateOnly = str.split(' ');
String[] strDate = myDateOnly[0].split('-');
String[] strtime = myDateOnly[1].split(':');
string Month=string.valueof(system.today().month());
string year=string.valueof(system.today().year());
string Day= strDate[2];
string hrs= strtime[0];
string mins=strtime[1];
string sec= strtime[2];
Datetime dcomp=datetime.newInstance(system.today().year(),system.today().month(),Integer.valueof(strDate[2]),Integer.valueof(strtime[0]),Integer.valueof(strtime[1]),Integer.valueof(strtime[2]));
if(system.now()<dcomp){
string times = sec+' '+Mins+' '+hrs+' '+day+' '+Month+' '+'?'+' '+year;
monthlyTaskscheduled st= new monthlyTaskscheduled();
string SCHEDULE_NAME = 'scheduledmonthlyTask';
//System.schedule(SCHEDULE_NAME,times,st);
Id jobid = System.schedule(SCHEDULE_NAME,times,st);
Testscheduling__c t = new Testscheduling__c();
t.name=jobid;
insert t;
}
}
}
My test coverage class is:
}
public class testscheduledmonthlyTaskJobScheduler
{
static testMethod void test()
{
scheduledmonthlyTaskJobScheduler s=new scheduledmonthlyTaskJobScheduler();
list<Schedule_Time__c> slist=new list<Schedule_Time__c>();
set<id> pset=new set<id>();
Testscheduling__c t1=new Testscheduling__c(name='aaa');
insert t1;
datetime d1;
monthlyTaskscheduled st= new monthlyTaskscheduled();
Testscheduling__c t = new Testscheduling__c();
for(profile p:[select id,name from profile where name='System administrator'])
pset.add(p.id);
for(Schedule_Time__c s1:[select id,date_time__c,SetupOwnerId from Schedule_Time__c where SetupOwnerId IN :pset])
{
if(s1.id!=null)
{
s1.date_time__c=system.now().adddays(1);
d1=s1.date_time__c;
slist.add(s1);
}
}
update slist;
Schedule_Time__c stc = Schedule_Time__c.getinstance();
//Datetime d2=datetime.newInstance(system.today().year(),system.today().month(),stc.date_time__C.day(),stc.date_time__c.hour(),stc.date_time__c.minute(),stc.date_time__C.second());
Datetime d2=datetime.newInstance(system.today().year(),system.today().month(),d1.day(),d1.hour(),d1.minute(),d1.second());
if(system.now()< d2)
{
string times=d1.second()+' '+d1.minute()+' '+d1.hour()+' '+d1.day()+' '+system.today().month()+' ? '+system.today().year();
Id jobid = System.schedule('name',times,st);
t.name=jobid;
insert t;
}
scheduledmonthlyTaskJobScheduler.start();
s.scheduledmonthlyTaskJobScheduler();
}
I code which is in bold is not covered. please help me for solving this.. Thanks in advance.
You might get around this by doing something like this. I hope this makes sense:
1. Add a boolean variable to your class definition:
2. Then change your non covered code blocks to include the boolean as a criteria. Example:
3. Add a new test method that sets the boolean to true insuring that the blocks are executed. Example:
This is not a conclusive solution, but I hope you get the idea and it helps.
Regards,
Ivar
It your test class, create a record where:
select id,CronExpression from crontrigger where id=:ctname
Will return a result, that should get you into the first loop
For the second part:
Datetime dcomp=datetime.newInstance(system.today().year(),system.today().month(),Integer.valueof(strDate[2]),Integer.valueof(strtime[0]),Integer.valueof(strtime[1]),Integer.valueof(strtime[2]));
if(system.now()<dcomp){
Set up the test so that dComp actually returns something > now.
Not to detract from the topic, but instead of setting a variable bIsTest, it's better to use the static built-in method of Test.isRunningTest()