我正在尝试使用Declaratice Services注释(org.osgi.service.component.annotations
)测试OSGi服务。我根据AEM Multi-Project Example生成了我的项目。
public class PostServiceTest {
@Rule
public AemContext context = new AemContext((AemContextCallback) context -> {
context.registerInjectActivateService(new PostService());
}, ResourceResolverType.RESOURCERESOLVER_MOCK);
@Test
public void shouldFetchRandomPosts() {
final PostService postsService = context.getService(PostService.class);
final List<Post> posts = postsService.randomPosts(100);
assertEquals(100, posts.size());
}
}
每当我在IntelliJ中运行此测试时,OSGi Mocks都会抱怨测试类中缺少SCR元数据。
org.apache.sling.testing.mock.osgi.NoScrMetadataException: No OSGi SCR metadata found for class com.example.PostServiceTest
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:168)
at com.example.PostServiceTest.shouldReturnTheEnpointNamesWithValidConfigurationAsTheListOfAcceptableKeys(PostServiceTest.java:23)
这是否意味着我只能测试使用Apache Felix附带的旧SCR注释注释的类? OSGi Mocks suggests that Declarative Services annotations is supported in version 2.0.0 and higher的文档。我使用的版本符合此标准。