AEM MockitoJUnitRunner for servlet how to set resourceResolverFactory for AEMContext | Community
Skip to main content
srinivas_chann1
New Participant
June 13, 2020
Solved

AEM MockitoJUnitRunner for servlet how to set resourceResolverFactory for AEMContext

  • June 13, 2020
  • 2 replies
  • 1964 views

Hi,

 

Could some one provide inputs on the below

 

code in servlet is giving null exception for resourceResolverFactory .how to mock that using aemContext

 

Servelt class

 

public void doGet(final SlingHttpServletRequest request,
final SlingHttpServletResponse response){

@3214626
private ResourceResolverFactory resourceResolverFactory;

@9944223
public void doGet(final SlingHttpServletRequest request,
final SlingHttpServletResponse response) throws ServletException, IOException {
....
...
Map<String, Object> subService = new HashMap<>();
subService.put(ResourceResolverFactory.SUBSERVICE, SUB_SERVICE);
resourceResolver = resourceResolverFactory.getServiceResourceResolver(subService);
session = resourceResolver.adaptTo(Session.class);
......

response.setContentType(APPLICATION_JSON_UTF8);
}

 

 

In test class:-

@RunWith(MockitoJUnitRunner.class)
public class MyServletTest {

@InjectMocks
private MyServlet servlet;

@1227241
public final AemContext context = new AemContext(ResourceResolverType.JCR_MOCK);

@Mock
private MockSlingHttpServletRequest req;

@Mock
private MockSlingHttpServletResponse res;

 

@Before
public void init() throws Exception {
servlet = new MyServlet();
req = context.request();
res = context.response();

}

@2785667
public void doGet_shouldReturnHeaderAsExpected() throws IOException, ServletException {
servletUnderTest.doGet(req, res);
assertEquals(res.getContentType(), APPLICATION_JSON_UTF8);
}

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

@srinivas_chann1 Can you try below instead of MockRequest

 

 

@Mock private SlingHttpServletRequest req; @Mock private SlingHttpServletResponse res;

 

Thanks

Veena

 

2 replies

VeenaVikraman
VeenaVikramanAccepted solution
New Participant
June 16, 2020

@srinivas_chann1 Can you try below instead of MockRequest

 

 

@Mock private SlingHttpServletRequest req; @Mock private SlingHttpServletResponse res;

 

Thanks

Veena

 

arunpatidar
New Participant
June 14, 2020

Check https://wcm.io/testing/aem-mock/usage.html#Registering_OSGi_service

Try to inject service in init method 

 

// prepare sling request MockResourceResolverFactory resourceResolverFactory = new MockResourceResolverFactory(); ResourceResolver resolver = resourceResolverFactory.getResourceResolver(null); MockSlingHttpServletRequest request = new MockSlingHttpServletRequest(resolver);

 

Arun Patidar
srinivas_chann1
New Participant
June 15, 2020

Thanks for inputs.

It showing an error in IDE  for line MockSlingHttpServletRequest request = new MockSlingHttpServletRequest(resolver);

 

That

 

MockSlingHttpServletRequest (org.osgi.framework.BundleContext) in MockSlingHttpServletRequest cannot be applied to (ResourceResolver)