使用log:*在Apache Camel中设置模拟端点

时间:2014-09-26 17:49:51

标签: unit-testing mocking apache-camel

我有几条路径以日志uri结尾,例如

<route>
    <from uri="someUri" />
    <to uri="someProcessor" />
    <to uri="log:SOME_LOG?level=INFO" />
</route>

我正在使用CamelSpringJUnit4ClassRunner来运行我的单元测试。

我希望能够将我的日志端点模拟为MockEndpoint对象。我试过用

@MockEndpoints("log:*")

一起
end = MockEndpoint.resolve(camelContext, "log:SOME_LOG?level=INFO");

但是生成ClassCastException不能将InterceptSendToEndpoint强制转换为MockEndpoint。

并尝试了

@EndpointInject(uri="log:SOME_LOG?level=INFO")
MockEndpoint end;

但这也会产生IllegalArgumentException。

Invalid type: org.apache.camel.component.mock.MockEndpoint which cannot be 
injected via @EndpointInject/@Produce for: Endpoint[log:SOME_LOG?level=INFO]

我发现的解决方法是在我的日志uri前加上“mock:”并使用

@EndpointInject(uri="mock:log:SOME_LOG?level=INFO)并使用

在xml中定义我的路线
<route>
    <from uri="someUri" />
    <to uri="someProcessor" />
    <to uri="mock:log:SOME_LOG?level=INFO" />
</route>

但是我希望通过模拟我的日志来实现这一点:uris而不必修改camel.xml中的路由定义。

有什么东西我不见了吗?

1 个答案:

答案 0 :(得分:2)

当你使用@MockEndpoints("log:*")时,骆驼只为你创建一个模拟端点,模拟端点uri应该是mock:log:THE_REMAINED。您应该能够使用以下代码获取模拟端点:

end = MockEndpoint.resolve(camelContext, "mock:log:SOME_LOG?level=INFO");