我有一个带有驼峰的Spring引导应用程序。我有一个java定义的路线。我正在使用选择器。
from("jms:Q1?selector=fruit='apple'").process(appleProcessor);
from("jms:Q1?selector=fruit='orange'").process(orangeProcessor);
我想编写一个测试用例,在其中我需要验证选择器是否正常工作以及是否调用了正确的处理器。
那么如何模拟处理器。是否像模拟endpoint一样。
或者就像模拟一个对象(appleProcess,在上下文配置类中定义它的bean)并通过以下方式进行验证:
Mockito.verify(appleProcessor, VerificationModeFactory.times(1)).process(Mockito.any());
在我的测试用例中,我使用ProducerTemplate发送msg,并且我的路由被正确调用。
请帮帮忙。
我不完全理解你想实现什么。JMS选择器将正常工作,这是(或应该)由Camel的单元测试和Spring JMS单元测试保证的。
如果你想确保选择器工作,你应该创建一个联调,在队列中发布一些消息,检查队列和处理器。我认为这不会增加任何价值。
相反,如果您想测试“apple”消息是否到达appleProcator
,这是您代码的单元测试。您使用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:
endpoint并断言它们收到了预期的消息计数。
当然,单元测试每个处理器是另一种测试。