【发布时间】:2018-07-11 02:04:51
【问题描述】:
在我的 Maven 项目中,我创建了一个简单的 OSGi 服务,它只接受一个引用:
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@Component
public class MyFoo {
@Reference
private ResourceResolverFactory factory;
}
然后,使用 osgi-mock 教程,我创建了以下测试类:
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
public class MyFooTest {
@Rule
public OsgiContext mockContext = new OsgiContext();
@Test
public void test() {
ResourceResolverFactory mockFactory = Mockito.mock(ResourceResolverFactory.class);
mockContext.registerService(ResourceResolverFactory.class, mockFactory);
mockContext.registerInjectActivateService(new MyFoo());
}
}
测试在最后一行崩溃,但有以下异常:
org.apache.sling.testing.mock.osgi.NoScrMetadataException: No OSGi SCR metadata found for class MyFoo
at org.apache.sling.testing.mock.osgi.OsgiServiceUtil.injectServices(OsgiServiceUtil.java:381)
at org.apache.sling.testing.mock.osgi.MockOsgi.injectServices(MockOsgi.java:148)
at org.apache.sling.testing.mock.osgi.context.OsgiContextImpl.registerInjectActivateService(OsgiContextImpl.java:153)
at org.apache.sling.testing.mock.osgi.context.OsgiContextImpl.registerInjectActivateService(OsgiContextImpl.java:141)
at MyFooTest.testGetResolver(MyFooTest.java:22)
//snippet
按照互联网上的建议,我已联系到this configuration guide,并确保我的pom.xml 具有与maven-bundle-plugin 完全相同的配置-但这并没有解决问题。
知道我在哪里犯错了吗?
【问题讨论】:
标签: unit-testing osgi aem sling