I recently started to investigate Apache Camel and I have one issue. I start writing some test for my routes, and there are a lot of examples, where “to” part of route is written as
<route id="person-add-route">
<from uri="direct:start"/>
<to uri="mock:result"/>
</route>
So, I wrote a test, where I am exepcting to have mock:result as last endproint.
@Test
@DirtiesContext
public void testCamel() throws Exception {
// Given
Object body = "body";
int messageCount = 1;
MockEndpoint endpoint = getMockEndpoint("mock:result");
// When
template.sendBody("direct:start", body);
// Then
endpoint.expectedMessageCount(messageCount);
endpoint.assertIsSatisfied();
}
Here is the questions: Is this important to write mock:result if I want to test my route??
Advertisement
Answer
You don’t need to include “mock:result” in production, there are multiple ways to test your route. One is to implement isMockEndpoints
in your Camel test:
@Override
public String isMockEndpoints()
{
return "*";
}
So if your route is like this:
<route id="person-add-route">
<from uri="direct:start"/>
<to uri="direct:result"/>
</route>
You can check the MockEndpoint like this:
MockEndpoint endpoint = getMockEndpoint("mock:direct:result");
You can also use AdviceWith to modify your route at test time, by doing something like this:
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception
{
weaveAddLast().to("mock:result");
}
});
Also, as Claus mentioned in his comment, make sure you set your expectations before you send your message to the route.