Gradle 我可以将OSGi模拟与声明性服务注释一起使用吗
我正在尝试测试一个用Declaratice Services注释(Gradle 我可以将OSGi模拟与声明性服务注释一起使用吗,gradle,intellij-idea,junit,osgi,aem,Gradle,Intellij Idea,Junit,Osgi,Aem,我正在尝试测试一个用Declaratice Services注释(org.OSGi.service.component.annotations)注释的OSGi服务。我已经基于生成了我的项目 这是否意味着我只能测试带有ApacheFelix附带的旧SCR注释的类?OSGi模拟的文档。我使用的版本符合这个标准。有趣的是,这只发生在我直接从IDE运行测试时。事实证明,IntelliJ在编译我的类进行测试时并没有生成SCR元数据 当我用Gradle编译测试中的类时,使用'com.cognifide.ae
org.OSGi.service.component.annotations
)注释的OSGi服务。我已经基于生成了我的项目
这是否意味着我只能测试带有ApacheFelix附带的旧SCR注释的类?OSGi模拟的文档。我使用的版本符合这个标准。有趣的是,这只发生在我直接从IDE运行测试时。事实证明,IntelliJ在编译我的类进行测试时并没有生成SCR元数据 当我用Gradle编译测试中的类时,使用
'com.cognifide.aem.bundle'
插件生成SCR描述符,并将其放入生成的Java归档文件中。这就是Gradle执行的单元测试工作正常的原因。只需单击IntelliJ中的Run按钮,就会导致错过此步骤
为了让它工作,我最终设置了IntelliJ,允许我通过Gradle运行单元测试
我进入设置>构建、执行、部署>Gradle>Runner并使用下拉菜单,这样我就可以决定是否在逐个测试的基础上使用Gradle
如果您将BND插件与Gradle一起使用,这可能会对您有所帮助(您必须为Gradle进行调整):@Jens Gradle插件确实会生成元数据。我的问题源于这样一个事实,即IDE在编译测试源代码时不会这样做。把汇编工作交给格拉德尔完成了。
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());
}
}
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)