2017-05-25 178 views
0

我有一个骆驼的春季启动应用程序。 我有一个java定义的路线。我在那里使用选择器。阿帕奇骆驼测试路线

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

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

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

或者是像嘲讽的对象(appleProcessor,定义其豆在上下文配置类),并通过验证:

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

在我的测试情况下,我使用ProducerTemplate发送味精,和我路由正在被调用。

请帮忙。

回答

0

我不完全理解你想达到的目标。 JMS选择器正常工作,这是(或应该)由骆驼的单元测试和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:端点和断言,他们收到了预期的消息计数。

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