在 CamelBlueprintTest 中模拟 OSGi 引用不起作用

Mocking OSGi reference in CamelBlueprintTest does not work

我目前正在使用 CamelBlueprintTestSupport 设置测试。

在我的 blueprint.xml 中,我尝试了以下实现:

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

在我的测试中模拟 FooInterface class 与

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) 因为我只想检查测试配置) 最终呈阳性。

但在我的实际实现中,我没有接口即服务。相反,它是这样引用的 class:

<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: Gave up waiting for BlueprintContainer from bundle "FooTest" at com.myexample.test.FooTest.setUp(FooTest.java:49)

我看不出到底出了什么问题。顺便说一下,在 Karaf 上执行骆驼路线没有任何问题。我不知道是我的测试设置有误还是错误 在 CamelBlueprintTestSupport.

终于有了解决办法:

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

CU, 即