我有一个处理器,我使用CamelJmsDestinationName标头动态确定我的一条路线中的目的地(详情here)。
所以在我的处理器中我正在设置标题
exchange.getIn().setHeader("CamelJmsDestinationName",messageExport.getEndpoint());
然后在我的路线中,我有以下条款
.when(header("CamelJmsDestinationName").isNotNull())
//Set to dummy, actual queue name will be set by processor (CamelJmsDestinationName)
.to("activemq:queue:dummy")
.otherwise()
.to("{{message.export.no_type_match}}")
.log(LoggingLevel.ERROR, "Message could not be matched to an existing route");
这完全符合我的预期。但是我正在努力为这条路线编写单元测试。 如何测试消息是否以我为CamelJmsDestinationName设置的任何值结束?
答案 0 :(得分:2)
我建议最简单的方法是使用“activemq:queue:”部分的属性,并在测试中将其设置为“mock:activemq”。
.when(header("CamelJmsDestinationName").isNotNull())
//Set to dummy, actual queue name will be set by processor (CamelJmsDestinationName)
.to("{{activemq.endpoint}}:dummy")
.otherwise()
.to("{{message.export.no_type_match}}")
.log(LoggingLevel.ERROR, "Message could not be matched to an existing route");
然后您可以编写“activemq.endpoint”属性为“mock”的测试,因此您可以测试名为mock:dummy
等的模拟端点。
还有另一种方法可以编写activemq组件的模拟版本,但它更复杂。