Java ApacheCamel模拟端点

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是否很重要 您不需要在生产中包含“

我最近开始调查ApacheCamel,我有一个问题。 我开始为我的路线编写一些测试,有很多例子,其中路线的“to”部分写为

    <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");
    }
});