我想验证Camel路由定义中内置的重试逻辑。
from(somewhere)
.errorHandler(
defaultErrorHandler()
.log("something")
.maxRedeliveries(3)
)
.to(somewhere-else)
为此,我故意编写了一个测试引发异常。
int counter = 0;
@Test
public void simulateError() throws Exception {
NotifyBuilder nb = new NotifyBuilder(mock.getCamelContext()).whenDone(3).create();
mock.whenAnyExchangedReceived(
new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
counter++;
throw new FooException("Error during processing: " + counter);
}
}
);
template.sendBody(somewhere, "some message");
boolean matches = nb.matches(8, TimeUnit.SECONDS);
assertEquals("Exception raised", 3, counter);
}
现在可以正常工作了。但是,如果我通过添加
在matches
上断言
assertTrue(matches)
失败。换句话说,NotifyBuilder
的匹配条件永远不会得到满足,并且总是超时。
那是为什么?是因为重试不算作exchange
交货吗?
测试重新尝试尝试预期次数的规范方法是什么?
答案 0 :(得分:0)
结束循环并回答我自己的问题。
首先-实际上,重试不会计入完成消息。
正如克劳斯·易卜生所指出的那样,首选的(最短的)解决方案是验证该模拟程序是否接收了预期的消息数。那将是0
(在我的例子中是4)。所以工作代码看起来像
max_retries + 1