首页 > 解决方案 > 使用 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”方法。我在这里想念什么?

标签: unit-testingapache-camelspring-camel

解决方案


推荐阅读