Hi All,
I am trying to write a junit test case and i am unable to mock the casting of jcr session to Jackrabbit session.
Here is my Code :
resolver = request.getResourceResolver();
session = resolver.adaptTo(Session.class);
jcrSession = (JackrabbitSession) session;
Below is my Junit :
@Mock
Session session;
@Mock
ResourceResolver resolver;
@Mock
JackrabbitSession jcrSession;
PowerMockito.when(request.getResourceResolver()).thenReturn(resolver);
PowerMockito.when(resolver.adaptTo(Session.class)).thenReturn(session);
PowerMockito.when((JackrabbitSession) session).thenReturn(jcrSession); // i am getting error at this point
when i am trying to do this, i am getting "java.lang.ClassCastException"
Below is the error:
java.lang.ClassCastException: $javax.jcr.Session$$EnhancerByMockitoWithCGLIB$$b9cd1700 cannot be cast to org.apache.jackrabbit.api.JackrabbitSession
I have mocked my session and resolver objects but still i am getting the error.
Please help me in Mocking this for my junit test.
Thanks & Regards,
Indrajith
Hi indrajithp11346880 ,
This is a very common error.Please see the below threads:
https://stackoverflow.com/questions/32628863/mocking-type-casting-objects
https://stackoverflow.com/questions/28462611/mockito-classcastexception-a-mock-cannot-be-cast
Regards,
Arpit Varshney
Hi,
may I ask why do you need to have that cast at all? There should not be any need to do it.
Jörg
Hi,
I need to make some changes with the users in aem so i need the jackrabbit session which i need to get it from jcrSession session that why i need to cast it and the code is working fine but while writing my test case mocking that is cast is not working.
Thanks & Regards,
Indrajith
Hi,
I have tried this and it is not working. I am also doing the similar implementation.
I have mocked both the jcrSession and Jackrabbit session.
can you please elaborate the below discussion little, i am not getting what he is trying to tell.
https://stackoverflow.com/questions/28462611/mockito-classcastexception-a-mock-cannot-be-c ast
I would refactor the code in a way, that the cast to the JackrabbitSession plus all dependent functionality is separated in a dedicated method, and then stub this method with Mockito completely.
(Also I would recommend to use SlingContext, so you don't need to mock resources and nodes. See [1] for a sample.)
[1] https://cqdump.wordpress.com/2019/01/17/writing-unittests-for-aem-part-3-mocking-resources/
Hi @indrajithp11346 ,
You can try like below
when --> resolver.adaptTo(Session.class)).thenReturn(jackrabbitSession object) . @Mock JackrabbitSession jackrabbitSession ; and return jackrabbitSession object in thenReturn method.
If you try above you won't get cast exception
Views
Likes
Replies
Views
Likes
Replies
Views
Likes
Replies