Как получить экземпляр службы OSGi, определенный в blueprint.xml, при написании теста pax-exam?

Я хочу знать, пытался ли кто-нибудь протестировать бины / сервисы, предоставляемые через blueprint.xml, работающие в pax-exam с использованием собственного контейнера.

У меня есть проект с двумя пакетами - 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));

2 ответа

Я использую следующие системные пакеты:

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 ) );
}

Плюс мои собственные пакеты, поэтому мой полный Config выглядит примерно так:

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

Все мои услуги вводятся правильно. Например, я могу получить сервис BundleContext следующим образом:

@Inject BundleContext context;

Надеюсь, что это работает для вас тоже:)

Pax Exam не заботится о том, как сервисы OSGi регистрируются, вы можете использовать Blueprint, декларативные сервисы или делать это вручную.

Когда тест не работает, нужно проверить две вещи:

  • Сервисы зарегистрированы вообще? Используйте консоль / оболочку OSGi для проверки.
  • Включает ли ваша установка Pax Exam все необходимые файлы JAR?

Собственные интеграционные тесты Pax Exam могут служить примером для настройки тестовой среды.

Другие вопросы по тегам