Java ApacheCamel模拟端点
我最近开始调查ApacheCamel,我有一个问题。 我开始为我的路线编写一些测试,有很多例子,其中路线的“to”部分写为Java ApacheCamel模拟端点,java,spring,apache,apache-camel,Java,Spring,Apache,Apache Camel,我最近开始调查ApacheCamel,我有一个问题。 我开始为我的路线编写一些测试,有很多例子,其中路线的“to”部分写为 <route id="person-add-route"> <from uri="direct:start"/> <to uri="mock:result"/> </route> 以下是问题:如果我想测试我的路线,那么编写mock:result是否很重要 您不需要在生产中包含“
<route id="person-add-route">
<from uri="direct:start"/>
<to uri="mock:result"/>
</route>
以下是问题:如果我想测试我的路线,那么编写mock:result是否很重要 您不需要在生产中包含“mock:result”,有多种方法可以测试您的路线。一种是在骆驼测试中实现isMockEndpoints
:
@Override
public String isMockEndpoints()
{
return "*";
}
如果你的路线是这样的:
<route id="person-add-route">
<from uri="direct:start"/>
<to uri="direct:result"/>
</route>
您还可以使用在测试时修改路由,方法如下:
MockEndpoint endpoint = getMockEndpoint("mock:direct:result");
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception
{
weaveAddLast().to("mock:result");
}
});
此外,正如克劳斯在评论中提到的那样,确保在将消息发送到路由之前设置好期望值。不确定您的问题是什么……您是否在询问是否需要在所有路由的末尾包含模拟端点以测试它们?我在问-我是否需要在生产路由中包含“模拟:结果”?如果是,这对我来说相当混乱,因为我不明白为什么我需要在我的真实代码中添加测试功能?有没有办法在我的真实代码中排除“mock:”指令?这对我来说不是一个问题,但我想得到一些更优雅的解决方案。谢谢,你做错了,你应该在发送信息之前设定期望值。1) 设置期望值2)发送消息3)assert已满足要求Hi,实际上,我尝试了您的解决方案,但它不起作用,我收到DirectConsumerNotAvailableException-端点上没有可用的使用者。您需要用实际端点所需的内容替换
direct:result
。默认情况下,直接端点需要使用者。我只是以它为例,ApacheCamel官方网站可能是最好的资源。克劳斯·易卜生的书也是一本很好的参考书,但我不确定它是否是最新的。
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception
{
weaveAddLast().to("mock:result");
}
});