Как включить @UseAdviceWith в тестах Camel - PullRequest
1 голос
/ 12 февраля 2020

Я новичок в Camel и пытаюсь написать несколько тестов, использующих контекст Spring и аннотацию @UseAdviceWith. Мне нужно, чтобы аннотация @UseAdviceWith работала правильно (чтобы не запускать контекст Camel до того, как он был изменен), и я нашел два способа: один - добавить атрибут загрузчика, подобный этому (который упоминался в книге «Верблюд в книге действий»)

@ContextConfiguration(locations = {"classpath:/META-INF/spring/testContext.xml"},
        loader = CamelSpringDelegatingTestContextLoader.class)

Другой способ - использовать

@BootstrapWith(CamelTestContextBootstrapper.class)

В чем разница и как правильно использовать его в модульных тестах? Версия Camel, которую я сейчас использую, - 2.15.3.

1 Ответ

3 голосов
/ 14 февраля 2020

В чем разница

  • @BootstrapWith был представлен в Spring 4.1
  • Для более старых версий Spring используйте @ContextConfiguration s loader параметр

Они оба являются аннотациями Spring, а не Camel!

как правильно использовать его в модульных тестах

Camel предлагает три различных режима тестирования Spring . Чтобы использовать @UseAdviceWith, вы должны использовать « Camel Enhanced Spring Test ».

Если вы используете SpringBoot, была проблема с @UseAdviceWith, которая была исправлена ​​в Camel 2.21 .

JUnit 5 поддерживается в Camel 3.0. Camel 2.x поддерживает JUnit 4 или маркер JUnit 5.

В общем, это очень непонятно, как правильно настроить Camel-Spring-Testing, потому что это зависит от режима тестирования и, по крайней мере, от версий. верблюда, юнит и весна. Если вы добавите SpringBoot, у вас будет другая зависимость.

Однако это рабочая сигнатура тестового класса Route с Camel 2.24, SpringBoot 2.1, Spring 5.1 и JUnit Vintage

@RunWith(CamelSpringBootRunner.class)
@SpringBootTest(
    classes = {
        [Classes to load for the test]
    }
)
@EnableAutoConfiguration
@UseAdviceWith
public class MyTestClass { ... }
...