


Hi everybody,
Any help will be appreciated.
i am trying to create a unit test for myCustomService. This service has a reference to a JobManager. I didn't find any precise documentation to do that.
Here what i do :
@ExtendsWith({AemContextExtension.class,MockitoExtension.class})
class myCustomServiceTest
.
.
@Mock
private JobManager jobManager;
.private MyCustomService myCustomService = new MyCustomService ()
.
AemContext aemContext = new AemContext();
.
.
aemContext.registerService(JobManager);
aemContext.registerInjectActivateService(myCustomService); Line XX7
And i got a :
org.apache.sling.testing.mock.osgi.ReferenceViolationException: Unable to inject mandatory reference 'jobManager' ... no matching services were found at Line xx7.
PS : when i try to use :
AemContext aemContext = new AemContext(ResourceResolverType.JCR_OAK);
I have the following message :
java.lang.RuntimeException: Unable to initialize JCR_OAK resource resolver factory: Unable to instantiate resourcer resolver: org.apache.sling.testing.mock.sling.oak.OakMockResourceResolverAdapter. Make sure this maven dependency is included: org.apache.sling:org.apache.sling.testing.sling-mock-oak
Maybe could someone help me to understand : how do i have to mock a reference used in the service i want to test.
Thanks in advance.
Views
Replies
Sign in to like this content
Total Likes
Hi @Dody, could you please try below option
@Mock private JobManager jobManager; //... aemContext.registerService(JobManager.class, jobManager);
Views
Replies
Sign in to like this content
Total Likes
Hi Dody,
please check below thread and see if that helps you:
Also , it might be an issue with Uber jar version as well, pls check below also:
thanks
Views
Replies
Sign in to like this content
Total Likes
Hi @Siva_Sogalapalli ,
Thanks for taking some time for me. I already saw that ticket but doesn't feel it's the same isssue.
Thanks.
Views
Replies
Sign in to like this content
Total Likes
Views
Replies
Sign in to like this content
Total Likes
Hello @SantoshSai .
Thanks for your help. I tried to change the @Mock with @InjectMock on the jobManager but it doesn't work too. :
Cannot instantiate @InjectMocks field named 'jobManager'! Cause: the type 'JobManager' is an interface.
You haven't provided the instance at field declaration so I tried to construct the instance.
Regards.
Views
Replies
Sign in to like this content
Total Likes
Hi @Dody, could you please try below option
@Mock private JobManager jobManager; //... aemContext.registerService(JobManager.class, jobManager);
Views
Replies
Sign in to like this content
Total Likes
Hi @lukasz-m ,
Thanks for your help. I tried that yesterday and had an error so i thought it wasn't working properly. In fact the error was related to my config and as you said :
aemContext.registerService(JobManager.class, jobManager);
works well !
Thanks again.
Hi @Dody ,
You have to use @Mock for JobManager and after this line @InjectMocks for private MyCustomService myCustomService = new MyCustomService () which inject all your mocks to your service mock.
@Mock
private JobManager jobManager;
@InjectMocks
private MyCustomService myCustomService = new MyCustomService ();
Just curious, you said you are myCustomService, by the name it implies you are testing a service (which could be a interface). Does this line is valid private MyCustomService myCustomService = new MyCustomService ()
Please cross check if you are initializing your service properly.
Thanks!
Thanks!
Hi @MohitKumarK ,
it works well now ( cf previous answer ).
Thanks for your remark. I checked and everything is working fine.
Thanks for your time.
Regards.
Views
Replies
Sign in to like this content
Total Likes