Ich schreibe eine Anwendung mit Kamel für die Bereitstellung (schließlich) in einem Sicherungscontainer. Die Art des Projekts erfordert, dass ich Java und XML DSL mische und vergleiche.Wie mock ich Endpunkte mit Blaupause in Kamel?
Ich habe Probleme, das Mock Framework ordnungsgemäß mit Blueprint zu arbeiten.
Hier ist mein Komponententest, komplett basierend auf dem Beispiel 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";
}
}
Ich habe wörtlich das Beispiel here kopiert und modifiziert es sehr leicht so erweitern wir CamelBlueprintTestSupport
statt CamelTestSupport
. Dies erfordert getBlueprintDescriptor
über Reiten meinen Plan xml-zu-Punkt, in dem ich eine sehr einfach definiert habe (und völlig irrelevant für den Test) Route:
<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>
Der Test schlägt fehl mit:
java.lang.AssertionError: mock://log:foo Received message count. Expected: <1> but was: <0>
Das bedeutet also, dass die Nachricht den falschen Endpunkt nicht erreicht hat. Ändern CamelBlueprintTestSupport
für CamelTestSupport
und es funktioniert.
Also, wie bekomme ich Mocks wie dies funktioniert mit Blueprint richtig?