Как получить @UseAdviceWith при работе в Camel 3

Я собираюсь написать несколько модульных тестов для производственных маршрутов Camel в приложении Spring Boot. Для этого я использую adviceWith техника и не хочу CamelContextначать до того, как будет сделано консультирование. В Camel 2.24.2 мой тестовый класс выглядит как фрагмент ниже, я для краткости опустил такие детали, как автоматическое подключение и ожидания тестирования.

@RunWith(CamelSpringBootRunner.class)
@SpringBootTest
@UseAdviceWith
public class CamelApplicationTests {
    ...
    context.getRouteDefinition("test.simple").adviceWith(context, new AdviceWithRouteBuilder() {
        @Override
        public void configure() throws Exception {
            interceptSendToEndpoint("file:/home/outfolder")
                .skipSendToOriginalEndpoint()
                .to("mock:outFolder");
            }
        });
    context.start();
    ...
}

Выполняя этот тест, я получаю логи, как и ожидалось

INFO  melSpringBootExecutionListener - @RunWith(CamelSpringBootRunner.class) before: class org.sample.CamelApplicationTests.testSimple
INFO  melSpringBootExecutionListener - Initialized CamelSpringBootRunner now ready to start CamelContext
INFO  spring.CamelAnnotationsHandler - Skipping starting CamelContext(s) as UseAdviceWith annotation was found and isUseAdviceWith is set to true.

Теперь пришло время для перехода на Camel 3, и советующую часть нужно переписать следующим образом, и она работает нормально.

@RunWith(CamelSpringBootRunner.class)
@SpringBootTest
@UseAdviceWith
public class CamelApplicationTests {
    ...
    AdviceWithRouteBuilder.adviceWith(context, "test.simple", route ->
        route.interceptSendToEndpoint("file:/home/outfolder")
            .skipSendToOriginalEndpoint()
            .to("mock:outFolder"));
    context.start();
    ...
}

За исключением того, что CamelContext запускается автоматически, поэтому мы перезапустили рекомендованный маршрут.

INFO  o.a.c.i.e.InternalRouteStartupManager    : Route: test.simple started and consuming from: file:///home/infolder
INFO  o.a.c.impl.engine.AbstractCamelContext   : Total 1 routes, of which 1 are started
INFO  o.a.c.impl.engine.AbstractCamelContext   : Apache Camel 3.4.3 (camel) started in 0.923 seconds
INFO  org.sample.CamelApplicationTests         : Started  in 11.544 seconds (JVM running for 13.935)
INFO  o.a.c.i.engine.DefaultShutdownStrategy   : Starting to graceful shutdown 1 routes (timeout 45 seconds)
...
INFO  o.a.c.impl.engine.AbstractCamelContext   : Route: test.simple is stopped, was consuming from: file:///home/infolder
INFO  o.a.c.impl.engine.AbstractCamelContext   : Route: test.simple is shutdown and removed, was consuming from file:///home/infolder
INFO  org.apache.camel.reifier.RouteReifier    : AdviceWith route after: ...
...
INFO  o.a.c.i.e.InternalRouteStartupManager    : Route: test.simple started and consuming from: file:///home/infolder

Кажется, это ошибка или я что-то упустил?

PS
После некоторого исследования я обнаружил, что проблема была исправлена ​​в версии Camel 2.21, поэтому я проверил CamelSpringBootExecutionListener.java файл из 3.4.xветвь, и она выглядит нормально, но после более внимательного изучения моего файла журнала я заметил, что не было журнала подготовки @RunWith(CamelSpringBootRunner.class), что означает prepareTestInstance метод никогда не был вызван, но я думаю, он должен

1 ответ

Решили это, перейдя на Junit 5. Теперь у меня есть тестовые классы, помеченные как

import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
import org.apache.camel.test.spring.junit5.UseAdviceWith;
import org.springframework.boot.test.context.SpringBootTest;

@CamelSpringBootTest
@SpringBootTest
@UseAdviceWith
public class CamelApplicationTests {
    ...
}

Обратите внимание, есть

Другие вопросы по тегам