Как получить экземпляр службы 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 могут служить примером для настройки тестовой среды.