How to Mock the NodeIterator for JUnit5 testcases ? | Community
Skip to main content
Level 2
February 21, 2023
Solved

How to Mock the NodeIterator for JUnit5 testcases ?

  • February 21, 2023
  • 1 reply
  • 1915 views

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 @veenavikraman @albinis1 

 

Thank you.

 

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.