我有一条相当简单的路线:
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();
,测试仍然失败
答案 0 :(得分:2)
在测试中从端点创建交换,如
Endpoint endpoint = context.getEndpoint("direct:test-aces-input");
Exchange exchange = endpoint.createExchange();
template.send(exchange);
或直接使用sendBody
tempalte.sendBody("")