IAm*_*aja 17 java messaging unit-testing apache-camel
我有一系列"流水线"组件,都通过ActiveMQ消息队列进行通信.每个组件都使用Camel将每个队列视为端点.每个组件使用相同的基本模式:

每个组件消耗输入队列中的消息,处理消息,然后在出站/输出队列上放置1+消息.然后,"输出"队列成为链中下一个组件的"输入"队列.很基本的.
我现在正试图卷起袖子,并使用MockEndpointsCamel的测试API提供的每个组件的单元测试.我一直在倾倒javadocs和Camel网站上的一些例子,但我很难连接所有的点.
在我看来,对于每个组件,我的单元测试的一部分将要完成以下三件事:
我相信我需要MockEndpoints为每个队列创建如下:
@EndpointInject(uri = "mock:inputQueue")
protected MockEndpoint intputQueue;
@EndpointInject(uri = "mock:outputQueue")
protected MockEndpoint outputQueue;
Run Code Online (Sandbox Code Playgroud)
所以现在,在我的JUnit测试方法中,我可以设置期望并与这些端点交互:
@Test
public final void processMethodShouldSendToOutputQueue()
{
Component comp = new Component();
comp.process();
outputQueue.assertIsSatisfied();
}
Run Code Online (Sandbox Code Playgroud)
我只是不明白如何正确连接所有内容:
comp到inputQueue和outputQueueMockEndpoints?MockEndpoint,我如何设置期望,以便assertIsSatisfied()检查特定队列中是否存在消息,或者特定队列是否包含消息?Ben*_*Day 12
亚当,有几种方法可以做到这一点.
对于POJO组件,blackbox将它们与任何Camel上下文/路由分开测试,以专注于业务逻辑.
如果要对路由进行端到端测试,请考虑使用这些方法之一来验证路由中的每个步骤是否都满足.
我更喜欢AdviceWith,因为它非常灵活,可以利用熟悉的MockEndpoints.有关此的完整示例,请参阅此单元测试
简而言之,您将创建一个单元测试,将MockEndpoints注入您的路线,然后像往常一样对它们进行验证......
context.getRouteDefinition("myRouteId").adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
// mock all endpoints
mockEndpoints();
}
});
getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello World");
template.sendBody("direct:start", "Hello World");
Run Code Online (Sandbox Code Playgroud)