Hi @manisha594391 ,
Sharing code snipped. Try to use Junit5 and aem specific frameworks to write unit tests.
try to use AemContextExtension and MockitoExtension if needed
@ExtendWith({AemContextExtension.class, MockitoExtension.class})Sharing code snippet for schedulerTest for run method. Please check complete working demo files in git.
Scheduler
@Component(immediate = true, service = Runnable.class)
@Designate(ocd = SchedulerConfiguration.class)
public class GeeksScheduler implements Runnable {
private static final Logger LOG = LoggerFactory.getLogger(GeeksScheduler.class);
private int schedulerId;
@Reference
private Scheduler scheduler;
@Activate
protected void activate(SchedulerConfiguration config) {
schedulerId = config.schedulerName().hashCode();
addScheduler(config);
}
@Deactivate
protected void deactivate(SchedulerConfiguration config) {
removeScheduler();
}
protected void removeScheduler() {
scheduler.unschedule(String.valueOf(schedulerId));
}
protected void addScheduler(SchedulerConfiguration config) {
ScheduleOptions scheduleOptions = scheduler.EXPR(config.cronExpression());
scheduleOptions.name(String.valueOf(schedulerId));
scheduler.schedule(this, scheduleOptions);
}
@Override
public void run() {
LOG.info("\n ====> RUN METHOD");
}
}
Test Class
@ExtendWith(AemContextExtension.class)
class GeeksSchedulerTest {
AemContext aemContext=new AemContext();
private TestLogger LOG ;
private GeeksScheduler schedulerTest;
SchedulerConfiguration schedulerConfiguration;
int schedulerId;
@BeforeEach
void setUp() {
schedulerTest=aemContext.registerService(new GeeksScheduler());
LOG=TestLoggerFactory.getTestLogger(schedulerTest.getClass());
schedulerConfiguration=mock(SchedulerConfiguration.class);
when(schedulerConfiguration.schedulerName()).thenReturn("Geeks Scheduler");
when(schedulerConfiguration.cronExpression()).thenReturn("0/20 * * * * ?");
}
@Test
void run() {
schedulerTest.run();
List<LoggingEvent> logEvents = LOG.getLoggingEvents();
assertEquals(1,logEvents.size());
assertEquals(Level.INFO,logEvents.get(0).getLevel());
assertEquals("\n ====> RUN METHOD",logEvents.get(0).getMessage());
assertEquals(schedulerConfiguration.schedulerName(),"Geeks Scheduler");
}
}
https://github.com/aemgeeks1212/aemgeeks/blob/master/core/src/test/java/com/aem/geeks/core/schedulers/GeeksSchedulerTest.java
https://github.com/aemgeeks1212/aemgeeks/blob/master/core/src/main/java/com/aem/geeks/core/schedulers/GeeksScheduler.java
https://github.com/aemgeeks1212/aemgeeks/blob/master/core/src/main/java/com/aem/geeks/core/config/SchedulerConfiguration.java