JUnit - Page model NullPointerException

Avatar

Avatar

nitinjl

Avatar

nitinjl

nitinjl

25-11-2020

Hi All, 

Trying to get Page model object (OOB) in JUnit test case, but getting NullPointerException (at line#75).
Am I missing anything in the implementation, any thoughts/suggestion pleaseNullPointer.png.

AEM AEM 6 Developer AEM Junit

Accepted Solutions (1)

Accepted Solutions (1)

Avatar

Avatar

BrianKasingli

MVP

Avatar

BrianKasingli

MVP

BrianKasingli
MVP

26-11-2020

Try again after making your Sling Model more simple. Change to :

@Model(adaptables = {
          SlingHttpServletRequest.class, 
          Resource.class
     }, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class PageModel implements Page {

}

 If this doesn't work, try to remove implements Page. Just seeing it your developer's environment is working at all. It might just be a coding convention issue.

Answers (3)

Answers (3)

Avatar

Avatar

BrianKasingli

MVP

Avatar

BrianKasingli

MVP

BrianKasingli
MVP

26-11-2020

@nitinjl do you have the RunWith annotation set?

 

@RunWith(MockitoJUnitRunner.class)
public class ComponentTest {
    @Rule
    public final AemContext context = new AemContext(ResourceResolverType.JCR_MOCK);

    private Component component;
   
    @Test
    public void itShouldNotBeNull() {
         Resource componentContext = context.create().resource("/content/my-site/home/jcr:content/component", new ValueMapDecorator(ImmutableMap.<String, Object> of(
                "fakeProp", "example")));
        underTest = componentContext.adaptTo(Component.class);
        assertNotNulll(underTest);
    }
}

 

 

Avatar

Avatar

Vijayalakshmi_S

MVP

Avatar

Vijayalakshmi_S

MVP

Vijayalakshmi_S
MVP

26-11-2020

Hi @nitinjl,

Please check the Model under test. In this case, PageModel.class - If any of the injects/references used in sling model is null in the context of test environment, then it will result in Model being null. 

We need to set those references used in Model to aemContext and then use it to get the Model object. 

Example : If a Model uses Externalizer service, then we need to set the Externalizer to aemContext first before instantiating the Model. 

Please share the PageModel.class if it is fine to share for further debugging.

Avatar

Avatar

Sandeep6

Avatar

Sandeep6

Sandeep6

25-11-2020

Hi @nitinjl ,

Please try below line.

PageModel model = context.request().adaptTo(PageModel.class);

https://experienceleague.adobe.com/docs/experience-manager-learn/getting-started-wknd-tutorial-devel... 

If possible, please share json what you are referencing below. 

Thanks,

Sandeep.