Unit Test for a service using JobManger api
Hi Everybody.
I opened a previous ticket : https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/mocking-jobmanager-in-junit-unit-test/td-p/429046 because i had issue on mocking annotations.
I am opening a new ticket ( related to the previous ) because i will appreciate help or explanations that let me understand the process.
I have a service : scheduleJob.
In that service i have a function scheduling a job. It will looks like :
class ScheduleJob...
public void startMyJob(String topic, Map<String, Object> jobProperties) {
JobBuilder jobBuilder =jobManager.createJob(topic);
jobBuilder.properties(jobProperties); Line XXX
JobBuilder.ScheduleBuilder scheduleBuilder =jobBuilder.schedule();
scheduleBuilder.cron(schedulerExpression);
List<String> errors = new ArrayList<>();
ScheduledJobInfo scheduledJobInfo=scheduleBuilder.add(errors);
if(scheduledJobInfo==null){
do Something
}
}
else{
do something else
}
}
and in my unit test i have something like that :
class scheduleJobTest {
@Mock
private JobManager jobManager;
@Mock
private JobBuilder jobBuilder;
@Mock
private JobBuilder.ScheduleBuilder scheduleBuilder;
@InjectMocks
private ScheduleJob scheduleJob = new ScheduleJob() ;
AemContext aemContext = new AemContext();
@BeforeEach
void setUp() {
aemContext.registerService(JobManager.class,jobManager);
aemContext.registerService(JobBuilder.class,jobBuilder);
aemContext.registerService(JobBuilder.ScheduleBuilder.class,scheduleBuilder);
aemContext.registerInjectActivateService(ScheduleJob);
}
@Test
startMyJob(){
scheduleJob.startMyJob(); Line XXY
assert...
}
And it gives me a null pointer exception at line XXY inside the function scheduleJob.startMyJob at Line XXX.
Maybe i am not understanding how it works and i am not using the right method to do it. But the idea is :
I mock the JobManager, JobBuilder and all the ref/services needed in my scheduleJob Class and then i can just call my function and test it in UnitTestClass. Or do i need to stub them ? If i do that, where is the point to call my function ?
If someone could help me it will be really nice
Thanks in advance,
Regards