我正在骆驼路线上做集成测试。
骆驼路线:
from("direct:abc")
.routeId("abc-route")
.process(MyProcessor())
.toD("direct:xyz")
由于这条路由被隔离测试,我需要在测试中设置头;以前,他们从另一条路线到达。我该怎么做呢?
简化测试类:
@SpringBootTest
@MockEndpoints
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
class MyRouteTest {
@Autowired
lateinit var camelContext: CamelContext
@Produce(uri = "direct:abc")
lateinit var template: ProducerTemplate
@EndpointInject(uri = "mock:direct:xyz")
lateinit var destEndpoint: MockEndpoint
@Test
fun `should test route`() {
template.sendBody("")
}
}
我已经尝试了camelContext.adapt(ModelCamelContext::class.java)
,但仍然无法到达路由并强制修改它。
尽管在评论中已经有了答案,我认为这个问题值得有一个答案。
ProducerTemplate
接口有许多不同的方法来发送Camel Exchange到Camel端点。
有一些方法可以只发送消息体,一个消息体有一个或多个报头,或者一个消息体有一个或多个Exchange属性。
还有一个流畅的接口可用于以不错的描述性方式自定义Exchange.
骆驼文档中的例子:
Integer result = FluentProducerTemplate.on(context)
.withHeader("key-1", "value-1")
.withHeader("key-2", "value-2")
.withBody("Hello")
.to("direct:inout")
.request(Integer.class);