Подделка ссылки OSGi в CamelBlueprintTest не работает - PullRequest
0 голосов
/ 21 октября 2019

Я сейчас настраиваю тесты с помощью CamelBlueprintTestSupport.

В моем blueprint.xml я попробовал следующую реализацию:

<reference id="foo" interface="com.myexample.FooInterface" />

Пересмешивающий FooInterface в моем тестовом классе с

protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, Dictionary>> services) { 
        FooInterface foo = Mockito.mock(FooImpl.class);     
        services.put(FooInterface.class.getCanonicalName(), asService(foo, null));      
        super.addServicesOnStartup(services);       
}

работаетнормально (где FooImpl реализует FooInterface, конечно), например, выполнение теста (тест просто содержит assert (true), потому что я хотел бы только проверить конфигурацию теста) заканчивается положительно.

Но в моем реальномРеализация, у меня нет интерфейса в качестве службы. Вместо этого на этот класс ссылаются следующим образом:

<bean class=com.myexample.FooBar" id="foobar">
        <property name="foo" ref="foo" />
    </bean>

    <bean class="com.myexample.FooImpl" id="foo"/>

  <reference id="fooBarReference"
        component-name="foobar"
        interface="com.myexample.FooImpl" ext:proxy-method="classes" />

Моя фиктивная конфигурация в тесте такая:

protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, Dictionary>> services) { 
    FooImpl foo = Mockito.mock(FooImpl.class);      
    services.put(FooImpl.class.getCanonicalName(), asService(foo, null));    
    super.addServicesOnStartup(services);       
} 

Выполнение теста теперь завершается неудачей со следующим исключением:

java.lang.RuntimeException: ожидал BlueprintContainer из пакета "FooTest" в com.myexample.test.FooTest.setUp (FooTest.java:49)

Iне вижу, что на самом деле не так. Кстати, реализация верблюжьего маршрута на Карафе проходит без проблем. Я не знаю, если мой тест настроен неправильно или это ошибка в CamelBlueprintTestSupport.

1 Ответ

0 голосов
/ 29 октября 2019

Наконец, есть решение:

Properties dictionary = new Properties();
dictionary.setProperty("osgi.service.blueprint.compname","foobar"); 
services.put(FooImpl.class.getName(), asService(new FooImpl(), dictionary));

CU, т.е.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...