我正在寫一個應用程序使用駱駝部署(最終)在保險絲容器中。項目的性質要求我混合並匹配Java和XML DSL。我如何用駱駝模擬藍圖終點?
我無法讓模擬框架與藍圖正常工作。
這是我的單元測試,完全基於示例here。
public class MockNotWorking extends CamelBlueprintTestSupport {
@Test
public void testAdvisedMockEndpointsWithPattern() throws Exception {
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
mockEndpoints("log*");
}
});
getMockEndpoint("mock:log:foo").expectedBodiesReceived("Bye World");
getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
template.sendBody("direct:start", "Hello World");
// additional test to ensure correct endpoints in registry
assertNotNull(context.hasEndpoint("direct:start"));
assertNotNull(context.hasEndpoint("log:foo"));
assertNotNull(context.hasEndpoint("mock:result"));
// only the log:foo endpoint was mocked
assertNotNull(context.hasEndpoint("mock:log:foo"));
assertNull(context.hasEndpoint("mock:direct:start"));
assertNull(context.hasEndpoint("mock:direct:foo"));
assertMockEndpointsSatisfied();
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").to("direct:foo").to("log:foo").to("mock:result");
from("direct:foo").transform(constant("Bye World"));
}
};
}
protected String getBlueprintDescriptor() {
return "OSGI-INF/blueprint/blueprint.xml";
}
}
我抄逐字的例子here,並修改了它非常輕微,所以我們延長CamelBlueprintTestSupport
而不是CamelTestSupport
。這需要壓倒一切getBlueprintDescriptor
指向我的藍圖XML,我在其中定義了一個非常基本的(和完全無關的測試)路線:
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<camelContext id="validationRoute" xmlns="http://camel.apache.org/schema/blueprint" >
<route id="validation">
<from uri="direct:validation" />
<log message="validating..." />
</route>
</camelContext>
</blueprint>
測試失敗:
java.lang.AssertionError: mock://log:foo Received message count. Expected: <1> but was: <0>
所以這意味着消息沒有達到模擬終點。更改CamelBlueprintTestSupport
爲CamelTestSupport
,它的工作原理。
那麼,我如何得到像這樣的模擬藍圖正確工作?