【问题标题】:Mocks for AEM applicationAEM 应用程序的模拟
【发布时间】:2017-03-20 07:15:45
【问题描述】:

我们正在尝试学习 AEM 应用程序的单元测试框架。

我们浏览了一些文档 - ResourceResolver 模拟 - 吊带模拟 - JCR 模拟 - OSGI 模拟 - AEM 模拟 但是没有搞清楚,如果有人有这方面的专业知识,请分享一些上述主题的代码演示

谢谢, 古内什·马哈詹

【问题讨论】:

标签: unit-testing junit mocking aem


【解决方案1】:

在单元测试中,我们没有 JCR 和 OSGi 对象。

例如 如果您的代码包含搜索查询,那么您将需要访问 javax.jcr.Session 会话。您还需要一个 ResourceResolver 来获取资源。

代码有点像:

ResourceResolver resourceResolver = resolverFactory.getResourceResolver(properties);
Session session = resourceResolver.adaptTo(Session.class);

因此,在单元测试中,您将需要发送此类对象的模拟,因为您无法获得相同的实际版本。模拟只是一个虚拟对象,因此您不会在测试用例中获得空指针。使用 Mockito、JUnit、PowerMock 等模拟框架,您可以指定模拟方法调用的输出。

例如

@Mock
ResourceResolver resourceResolver;

@Mock
Session session;

@InjectMocks
YourMainClass objectOfYourMainClass;

然后使用 whenThen 语句指定测试中的预期行为。

when(mock.methodCall).thenReturn(expectedReturnObject);

例如

when(resourceResolver.adaptTo(Session.class)).thenReturn(session);

PowerMock 是一个用于模拟类的框架,这是使用基本 Mocking 框架无法实现的。例如可以使用 PowerMock 模拟静态类。

您可以访问 Powermock github 链接以获取有关 PowerMock 的信息。

有关 Mocking 的更多信息,请参阅以下链接:

http://www.vogella.com/tutorials/Mockito/article.html

https://dzone.com/articles/getting-started-mocking-java

【讨论】:

  • 直到现在还没有真正使用过 Sling Mocks。会检查的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2023-03-23
相关资源
最近更新 更多