Ссылка на Mocking OSGi в CamelBlueprintTest не работает

В настоящее время я настраиваю тесты с 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)

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

1 ответ

Решение

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

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

CU, iE

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