Как получить @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 {
...
}
Обратите внимание, есть