#java #unit-testing #apache-camel
#java #модульное тестирование #apache-camel
Вопрос:
При тестировании маршрута camel у меня есть родительский класс с обработкой:
onException(org.xyz.SomeException.class)
.maximumRedeliveries(7)
.redeliveryDelay(25000)
.handled()
.end();
И у меня есть дочерний класс RouteBuilder, который наследуется от него и использует super.configure()
@Override
public void configure() throws Exception {
super.configure();
from("direct:mytest")
.routeId("mytest")
.process(new SomeProcessor())
.to("mock:endpoint");
}
Я хотел бы запустить это в тесте, и у меня есть привязка, в которой я утверждаю, что она была доставлена повторно 7 раз… Однако, когда тест выполняется, мне все равно приходится ждать 25 секунд между каждой повторной доставкой. Есть ли способ заставить Camel игнорировать повторную доставку или каким-то образом установить для нее значение 0 только для тестов?
Если я попытаюсь переопределить значение повторной доставки в тестах, оно перезаписывает то, что было унаследовано от родителя?
Есть ли способ получить родительское унаследованное определение onException и изменить только свойство redeliveryDelay?
Я пробовал это
routeDefintionUnderTest.onException(org.xyzSomeException.class).getRedeliveryPolicy();
но он возвращает null, как будто он не может получить то, что было определено с помощью super.configure() ?
Ответ №1:
Вы пытались использовать PropertyPlaceholder-переопределение свойств? Ваш тайм-аут может быть помещен в переменную в вашем проекте и переопределен для целей тестирования.
Ответ №2:
Я обнаружил, что могу получить доступ к повторной доставке программно следующим образом:
class RouteUnderTest extends MyRoute {
@Override
public void configure() throws Exception {
super.configure();
final List<OnExceptionDefinition> onExceptionDefinitions = super.getRouteCollection().getOnExceptions();
for (final OnExceptionDefinition oed : onExceptions) {
oed.redeliveryDelay(0);
}
}
}