我最近开始调查Apache Camel,我有一个问题。 我开始为我的路线编写一些测试,并且有很多例子,其中" to"路线的一部分写为
<route id="person-add-route">
<from uri="direct:start"/>
<to uri="mock:result"/>
</route>
所以,我写了一个测试,我正在考虑将mock:result作为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();
}
以下是问题:如果我想测试我的路线,写 mock:result 是否很重要?
答案 0 :(得分:6)
您不需要在生产中包含“mock:result”,有多种方法可以测试您的路线。一种是在Camel测试中实现isMockEndpoints
:
@Override
public String isMockEndpoints()
{
return "*";
}
所以如果你的路线是这样的:
<route id="person-add-route">
<from uri="direct:start"/>
<to uri="direct:result"/>
</route>
您可以像这样检查MockEndpoint:
MockEndpoint endpoint = getMockEndpoint("mock:direct:result");
您还可以使用AdviceWith在测试时修改您的路线,方法如下:
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception
{
weaveAddLast().to("mock:result");
}
});
此外,正如克劳斯在评论中提到的那样,请确保在将信息发送到路线之前设定您的期望。