Apache驼峰测试路线

时间:2017-05-25 07:56:29

标签: java unit-testing apache-camel

我有一个带驼峰的春季启动应用程序。 我有一个java定义的路由。我正在使用选择器。

 from("jms:Q1?selector=fruit='apple'").process(appleProcessor);
 from("jms:Q1?selector=fruit='orange'").process(orangeProcessor);

我想编写一个测试用例,我需要验证选择器是否正常工作以及是否调用了正确的处理器。

那么如何模拟处理器。是否像嘲弄端点。

或者就像模拟一个对象(appleProcessor,在上下文配置类中定义它的bean)并通过以下方式验证:

Mockito.verify(appleProcessor, VerificationModeFactory.times(1)).process(Mockito.any());

在我的测试用例中,我使用ProducerTemplate发送msg,我的路由正在被正确调用。

请帮忙。

1 个答案:

答案 0 :(得分:0)

我不完全明白你想要实现的目标。 JMS选择器正常工作,这是(或应该)由Camel的单元测试和Spring JMS单元测试保证。

如果要确保选择器正常工作,则应创建集成测试,在队列中发布一些消息,检查队列处理器。我不认为它会增加任何价值。

相反,如果您要测试'apple'消息是否转到appleProcessor,则这是对您的代码的单元测试。使用ProducerTemplate的方法很好。我认为问题在于您的处理器是链中的最后一步。你可以重构你的路线:

from("jms:Q1?selector=fruit='apple'").to("direct:processApple");
from("direct:processApple").process(appleProcessor);

from("jms:Q1?selector=fruit='orange'").to("direct:processOrange")
from("direct:processOrange").process(orangeProcessor);

现在,您可以模拟direct:个端点并声明它们已收到预期的消息计数。

当然,对每个处理器进行单元测试是另一项测试。