2

我想知道是否有人尝试使用本机容器在 pax-exam 中测试通过 blueprint.xml 暴露的 bean/服务。

我有一个包含两个捆绑包的项目 - a) config - 接口类 b) config-impl - 包含实现并将 bean 公开为 blueprint.xml 中定义的服务。

我希望测试类中的@Inject 类似于@ https://ops4j1.jira.com/wiki/display/PAXEXAM3/Getting+Started+with+OSGi+Tests中提到的方法应该自动设置@Inject 中的实例值' ed 变量,但它似乎没有工作。

发送到 pax-exam 的选项粘贴在下面。是否有更多的包要加载,以便 pax-exam 开始识别 blueprint.xml 并启动服务?

    return options(
            systemProperty("osgi.console").value("6666"),
            junitBundles(),
            provision(
                    mavenBundle("org.osgilab.testing", "commons", "1.0.0"),
                    mavenBundle("org.apache.commons", "com.springsource.org.apache.commons.codec", "1.3.0"),
                    mavenBundle("org.codehaus.jackson", "jackson-core-asl", "1.9.12"),
                    mavenBundle("org.codehaus.jackson", "jackson-mapper-asl", "1.9.12"),
                    mavenBundle("com.umum.container", "container-config", "1.0.0"),
                    mavenBundle("com.umum.container", "container-config-impl", "1.0.0").start()),

            systemProperty("pax.exam.service.timeout").value("160000"), systemTimeout(160000));
4

2 回答 2

5

我使用以下系统捆绑包:

static Option systemBundles() {
  return composite(
    mavenBundle( "org.apache.aries.blueprint", "org.apache.aries.blueprint", "1.0.0" ),
    mavenBundle( "org.apache.aries", "org.apache.aries.util", "1.0.0" ),
    mavenBundle( "org.apache.aries.proxy", "org.apache.aries.proxy", "1.0.0" ),
    junitBundles(),
    cleanCaches( true ) );
}

加上我自己的包,所以我的完整配置看起来类似于:

@Configuration
Option[] config( ) {
    return options(
      javaFxPackages(),
      systemBundles(),
      mavenBundle( "org.codehaus.groovy", "groovy-all", "2.1.1" ) );
}

我所有的服务都被正确注入。例如,我可以像这样获得 BundleContext 服务:

@Inject BundleContext context;

希望这对你也有用:)

于 2013-07-12T21:49:35.337 回答
-1

Pax Exam 不关心 OSGi 服务是如何注册的,您可以使用 Blueprint、Declarative Services 或手动进行。

当测试似乎不起作用时,有两件事需要检查:

  • 服务是否已注册?使用 OSGi 控制台/shell 进行检查。
  • 您的 Pax 考试设置是否包含所有必需的 JAR?

Pax Exam 自己的集成测试可以作为设置测试环境的示例。

于 2013-07-09T16:50:04.030 回答