Как протестировать блоки Camel onExceptions с длинными задержками повторной доставки в тестах

#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);
    }
  }
}