Camel:模拟处理器来测试Route

时间:2017-12-08 09:40:03

标签: java unit-testing apache-camel mockito

我正在尝试为路由创建单元测试。 我有以下路线配置

from ("direct:getA")
    .routeId("get-a").startupOrder(1)
    .process(exchange -> {
        QueryObject queryObject = exchange.getIn().getBody(QueryObject.class);
        exchange.getIn().setHeader(foo, queryObject.getH());
        exchange.setOut(exchange.getIn());
    })
    .choice()
        .when(header(foo).isEqualTo(fooConstant.bar))
            .process("barProcessor")
        .when(header(foo).isEqualTo(fooConstant.bie))
            .process("bieProcessor")
    .end();

我的问题是,如何模拟“barProcessor”和“bieProcessor”?

我尝试使用adviceWith,但我无法检索routeDefinition。 context.getRouteDefinitions()返回一个空列表。

修改 以下是我测试中的代码段。

RouteDefinition routeDef = context.getRouteDefinition("get-a");
routeDef.adviceWith(context, new AdviceWithRouteBuilder() {
        @Override
        public void configure() throws Exception {
            interceptSendToEndpoint("*barProcessor*").process(
                    new Processor() {
                        @Override
                        public void process(Exchange exchange) {
                            System.out.println("bar");
                        }
                    }
            );
            interceptSendToEndpoint("*bieProcessor*").process(
                    new Processor() {
                        @Override
                        public void process(Exchange exchange) {
                            System.out.println("Bie");
                        }
                    }
            );
        }
    });

String request = <JSON Request>;
websocket.sendTest(request);

但是context.getRouteDefinition("get-a");返回null。当我还使用context.getRouteDefinitions()时,它会返回一个空列表。

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的原因。 我忘了覆盖createRouteBuilder和createJndiContext。

@Override
protected RouteBuilder createRouteBuilder() {
    return new SampleRoute(<param>);
}

@Override
protected JndiContext createJndiContext() throws Exception {
    JndiContext context = new JndiContext();
    context.bind("barProcessor", new BarProcessor());
    context.bind("bieProcessor", new BieProcessor());
    return context;
}

我从此链接找到了解决方案:Unit Test

相关问题