在 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, 即
我目前正在使用 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, 即