[英]AEM JUnit java.lang.NullPointerException
我需要为 AEM 项目中的一个类创建一个 Junit 测试,我遇到了 NullPointerException 问题:我创建了 ClassTestImpl
@ExtendWith({AemContextExtension.class, MockitoExtension.class})
class TestImpl {
private final AemContext ctx = new AemContext();
@Mock
private Test test;
@Mock
private ModelFactory modelFactory;
@BeforeEach
void setUp() throws Exception {
ctx.addModelsForClasses(TestImpl.class);
ctx.load().json("/com/project/core/models/adobe/TestImplTest.json","/content");
lenient().when(modelFactory.getModelFromWrappedRequest(eq(ctx.request()),
any(Resource.class), eq(Test.class)))
.thenReturn(test);
}
@Test
void testGetText() {
final String expected = "textTEST";
ctx.currentResource("/content/text");
Test test = ctx.request().adaptTo(Test.class);
String actual = test.getText();
assertEquals(expected,actual);
}
和json结构:
"text": {
"jcr:primaryType": "nt:unstructured",
"sling:resourceType": "project/components/core/title",
"text": "textTEST"
}
}
当我运行测试时,我给出了结果:
@Test
void testGetText() {
final String expected = "titleTEST";
ctx.currentResource("/content/title");
Title title = ctx.request().adaptTo(Title.class);
-->String actual = title[NullPointerException].getText();<--
assertEquals(expected,actual);
}
看起来您的模型是null
引用。 您确实尝试使用MockitoExtension
来模拟它,但这在很大程度上是多余的,因为您也在使用AemContextExtension
并且这可能是问题的原因。
除了空指针,这段代码甚至没有测试任何东西。 一切都被嘲笑,即使是我理解为被测试对象的Test
类。
此外,您传递给addModelsForClasses
的参数看起来像测试类 ( TestImpl
) 而不是 Sling Model Test
的类。
不要依赖 Mockito,而是让 AEM Mocks 库自行设置所有底层对象,并确保您正在测试的类是真实的,而不是模拟的。
@ExtendWith(AemContextExtension.class)
class TestImpl {
private final AemContext ctx = new AemContext();
@BeforeEach
void setUp() throws Exception {
ctx.addModelsForClasses(Test.class); // Give it the Sling Model
ctx.load().json("/com/project/core/models/adobe/TestImplTest.json","/content");
}
@Test
void testGetText() {
final String expected = "textTEST";
ctx.currentResource("/content/text");
Test test = ctx.request().adaptTo(Test.class); // It'll use the actual class, not a mock this way
String actual = test.getText();
assertEquals(expected,actual);
}
}
看
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.