Camel NotifyBuilder总是返回false

时间:2017-10-13 12:45:25

标签: java apache-camel

我有一条相当简单的路线:

PerfStubRouteBuilder.java

public class PerfStubRouteBuilder extends SpringRouteBuilder {

    /* (non-Javadoc)
     * @see org.apache.camel.builder.RouteBuilder#configure()
     */
    @Override
    public void configure() throws Exception {
        from("direct:test-aces-input")
        .log("Creating test Accident Number header")
        .setHeader("AccidentNumber", simple("AB999999999"))
        .log("Test Accident Number header created : ${header.AccidentNumber}")
        .end();
    }
}

我正在测试它如下:

PerfStubRouteBuilderTest.java

public class PerfStubRouteBuilderTest extends CamelTestSupport {
    @Produce(uri = "direct:test-aces-input")
    ProducerTemplate template;

    PerfStubRouteBuilder route = new PerfStubRouteBuilder();
    Exchange exch = new DefaultExchange(context);

    @Override
    protected RouteBuilder createRouteBuilder() {
        return route;
    }

    @Test
    public void test_PerfStubRouteBuilder_happyPath_addsAccidentNumberHeaderToExchange() throws Exception {
        startCamelContext();
        NotifyBuilder notify = new NotifyBuilder(context).from("direct:test-aces-input").whenDone(1).filter(header("AccidentNumber").isEqualTo("AB999999999")).create();
        template.send(exch);
        assertTrue(notify.matches(10, TimeUnit.SECONDS));
        stopCamelContext();
    }
}

assertTrue总是回复为false,所以我怀疑我没有正确使用NotifyBuilder,尽管此时我无法确定。基本上我想检查一个交换机是否通过路由,并将实际路由中指定的头添加到交换机。我想要发生的是,如果具有该标题值组合的交换使其到达路径的末尾,则进行匹配,因此是过滤步骤。我想避免在路径的末尾添加一个端点,例如,通过AdviceWith给出路径本身的小而简单,开始为这样的小测试添加模拟端点似乎有点重量级

更新:

尝试从表达式中删除过滤器部分,将NotifyBuilder保留为NotifyBuilder notify = new NotifyBuilder(context).from("direct:test-aces-input").whenDone(1).create(); ,测试仍然失败

1 个答案:

答案 0 :(得分:2)

在测试中从端点创建交换,如

Endpoint endpoint = context.getEndpoint("direct:test-aces-input");
Exchange exchange = endpoint.createExchange();
template.send(exchange);

或直接使用sendBody

tempalte.sendBody("")