Gradle 我可以将OSGi模拟与声明性服务注释一起使用吗

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

我正在尝试测试一个用Declaratice Services注释(
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)