如何使用CamelJmsDestinationName测试路由?

时间:2014-10-08 07:05:25

标签: unit-testing junit apache-camel

我有一个处理器,我使用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设置的任何值结束?

1 个答案:

答案 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组件的模拟版本,但它更复杂。