在单元测试中,我们没有 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