Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

Adobe Summit 2023 [19th to 23rd March, Las Vegas and Virtual] | Complete AEM Session & Lab list
SOLVED

How to Mock the NodeIterator for JUnit5 testcases ?

Avatar

Level 2

I have the below snippet of code from service class for which i am trying to write a JUnit testcase.

I wanted to stub my NodeIterator, I have tried different approaches to do it but it never returns the mockobject, instead always returns the actual object, am I missing something here ?

The Size of the Node Iterator is always 0 too.

Snippet from Service Class:

 

 

Session session = userResourceResolver.adaptTo(Session.class);
QueryManager queryManager = session.getWorkspace().getQueryManager();
Query query = queryManager.createQuery(statement, Query.JCR_SQL2);
QueryResult queryResult = query.execute();
NodeIterator nodeIter = queryResult.getNodes();
LOG.debug("size is {}", nodeIter.getSize());
nodeIter.forEachRemaining((item) -> {
   getUserNodeProperties(excludedGroups, userResourceResolver, session, item);
});

 

 

Approaches done so far for Testcases to mock the NodeIterator in Junit5:

 

Approach 1:

 

lenient().when(mockResourceResolverFactory.getResourceResolver(anyMap())).thenReturn(mockResourceResolver);
lenient().when(mockResourceResolver.adaptTo(Session.class)).thenReturn(mockSession);
lenient().when(mockSession.getWorkspace()).thenReturn(mockWorkspace);
lenient().when(mockWorkspace.getQueryManager()).thenReturn(mockQuerymanager);
lenient().when(mockQuerymanager.createQuery("dummy", Query.JCR_SQL2)).thenReturn(mockQuery);
lenient().when(mockQuery.execute()).thenReturn(mockresult);
lenient().when(mockresult.getNodes()).thenReturn(mockNodeItr);    lenient().when(mockNodeItr.hasNext()).thenReturn(true).thenReturn(true).thenReturn(false);	 lenient().when(mockNodeItr.nextNode()).thenReturn(userOneNode).thenReturn(userTwoNode).thenReturn(null);

 

 

Approach 2:

 

doReturn(mockNodeItr).when(mockresult).getNodes();
doReturn(true,true,false).when(mockNodeItr).hasNext();
doReturn(userOneNode,userTwoNode,null).when(mockNodeItr).next();

 

 

Is there any other way to mock it ? Am I missing something in here, please let me know

 

Thanks.

 

@arunpatidar @Veena_Vikram @Albin_Issac 

 

Thank you.

 

Topics

Topics help categorize Community content and increase your ability to discover relevant content.

1 Accepted Solution

Avatar

Correct answer by
Community Advisor
2 Replies

Avatar

Correct answer by
Community Advisor

The ultimate experience is back.

Join us in Vegas to build skills, learn from the world's top brands, and be inspired.

Register Now