I'm writing test methods for my scheduled apex classes and I find the test methods are almost the same. How can I write a method and pass the scheduled apex class name as parameter so I can reuse the method?
@isTest static void test_Method1() {
Test.startTest();
String jobId = System.schedule('ScheduleApexClassTest', CRON_EXP, new Method1Scheduler());
CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered,NextFireTime FROM CronTrigger WHERE id = :jobId];
System.assertEquals(CRON_EXP,ct.CronExpression);
System.assertEquals(0, ct.TimesTriggered);
System.assertEquals('2022-03-15 00:00:00',String.valueOf(ct.NextFireTime));
Test.stopTest();
}
@isTest static void test_Method2() {
Test.startTest();
String jobId = System.schedule('ScheduleApexClassTest', CRON_EXP, new Method2Scheduler());
CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered,NextFireTime FROM CronTrigger WHERE id = :jobId];
System.assertEquals(CRON_EXP,ct.CronExpression);
System.assertEquals(0, ct.TimesTriggered);
System.assertEquals('2022-03-15 00:00:00',String.valueOf(ct.NextFireTime));
Test.stopTest();
}
@isTest static void test_Method3() {
Test.startTest();
String jobId = System.schedule('ScheduleApexClassTest', CRON_EXP, new Method3Scheduler());
CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered,NextFireTime FROM CronTrigger WHERE id = :jobId];
System.assertEquals(CRON_EXP,ct.CronExpression);
System.assertEquals(0, ct.TimesTriggered);
System.assertEquals('2022-03-15 00:00:00',String.valueOf(ct.NextFireTime));
Test.stopTest();
}
@isTest static void test_Method4() {
Test.startTest();
String jobId = System.schedule('ScheduleApexClassTest', CRON_EXP, new Method4Scheduler());
CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered,NextFireTime FROM CronTrigger WHERE id = :jobId];
System.assertEquals(CRON_EXP,ct.CronExpression);
System.assertEquals(0, ct.TimesTriggered);
System.assertEquals('2022-03-15 00:00:00',String.valueOf(ct.NextFireTime));
Test.stopTest();
}