unit-testing - 使用 CamelTestSupport 进行单元测试时,Camel 拆分器不会拆分消息
问题描述
因此,我正在对骆驼应用程序进行单元测试,但遇到了一些拆分器路由的问题。以下是它们现在的设置方式:
from("direct:mockPlay")
.process(someProcessor)
.split().method(splitterInsatance).streaming()
.choice().when(body().isNotNull())
.process(splitMessageProcessor)
.toD("${exchangeProperty.NEXT_ROUTE}")
.end()
.end();
这里的“splitMessageProcessor”是一个自定义文件拆分器,带有一个带有签名的方法:
public Iterator<Message> splitMessage(Exchange exchange, @Header(value = "someValue") int value)
“someValue”是“someProcessor”添加的标头,并且被正确添加。“NEXT_ROUTE”是由“splitMessageProcessor”添加的属性。
当我将其作为常规骆驼应用程序运行时,此路由设置按预期工作。但是,当使用 CamelTestSupport 对拆分器进行单元测试时,消息不会被拆分。
这是我的单元测试的编写方式:
public class SplitterTest extends CamelTestSupport {
@Produce(value = "direct:mockPlay")
ProcucerTemplate start;
@EndpointInject("mock://splitDestination")
MockEndpoint finish;
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
// Does some mocking.
return instanceOfRouteBuilderWithSplitterRouteDefinition;
}
@Test
public void routeBuilderSetupTest() throws Exception {
Exchange exchange = new DefaultExchange(context);
exchange.getMessage().setBody("A B C");'
finish.expectedBodiesRecieved("A", "B", "C");
start.send(exchange);
assertMockEndpointsSatisfied();
}
我收到以下断言错误:mock://splitDestination 消息正文:0。应为 <A> 但为 <AB C>。
这是一个问题,尽管这条路线在定期运行时确实有效。它只会在 CamelTestSupport 上失败。此外,除了“splitterInstance”之外,我还可以添加断点并运行整个代码。似乎拆分器永远不会使用“splitMessage”方法。我在这里想念什么?
解决方案
推荐阅读
- angular - 一个组件中的多个数据表 [Angular Material Tables] 排序、过滤和分页
- elasticsearch - Elasticsearch 最佳实践:直接从前端或后端使用
- pine-script - 我如何提出一个好问题?这是错误吗?
- sql - 一对多关系的最大约束 - Oracle SQL
- c# - Xamarin 将图像添加到 StackLayout OnChange
- tensorflow - 检索最大和最小损失和指标值
- c - Mac 上 OpenSSL 中 SSL_CTX_load_verify_locations 的证书文件在哪里?
- r - 如何创建将单元格值映射到三元颜色空间的地图?
- c# - 在c#中将回历日期转换为公历日期
- elasticsearch - Logstash sincedb 文件为空且文件未读取