Apache Camel模拟端点

时间:2014-12-02 16:03:21

标签: java spring apache apache-camel

我最近开始调查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 是否很重要?

1 个答案:

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

此外,正如克劳斯在评论中提到的那样,请确保在将信息发送到路线之前设定您的期望。