почему моя тестовая конфигурация spring-cloud-stream также запускает слушателей rabbitMQ в другом классе? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь выполнить простой модульный тест «поток пружины и облака», чтобы проверить проводку между потоками; в основном, обработчик может читать из одного потока и записывать в другой. Эта часть работает нормально. Проблема в том, что другие части приложения также запускаются; а именно, слушатель rabbitMQ. В другом классе есть метод (помимо того, который я тестирую), у которого есть @RabbitListener. Это вызываемый метод. И у меня есть кролик, работающий локально на моей машине, для локального тестирования. Но я не хочу, чтобы это вызывалось в рамках теста.

Тестовые документы Spring-Cloud-Stream здесь пример имеет

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT)

Я думаю, что @SpringBootTest запускает всю конфигурацию, включая слушателей RabbitMQ. Я удалил параметр webEnvironment, но это не имело значения.

На данный момент, обходной путь должен поместить spring.rabbitmq.listener.simple.auto-startup: false в application.yml, но это не то, что я хочу продолжить по различным причинам, одной из которых является то, что я, вероятно, хочу модульное тестирование этого кроличьего слизняка в одной точке, хотя и в правильно ограниченном тестовом контексте.

Мы используем версию 2.0.1 поддержки spring-cloud-stream и spring-cloud-stream-test-support, хотя это, кажется, более фундаментальная проблема конфигурации Spring, которую я не понимаю, как ограничить контекст .

1 Ответ

0 голосов
/ 10 января 2019

Вы можете использовать заполнитель свойства в свойстве autoStartup

spring.rabbitmq.listener.simple.auto-startup: ${auto.start:true}

, а затем используйте @TestPropertySource в тестовом примере, чтобы установить для него значение false.

...