Тесты Spring Integration с каналами очереди - PullRequest
0 голосов
/ 09 февраля 2020

В Spring Integration у меня есть настройка DSL, которая выглядит примерно так:

                                       --->                                        --->
                                       --->                                        --->
Messages --> Gateway ---> QueueChannel ---> MessageHandler(worker) -> QueueChannel ---> MH worker2 --> ...
                                       --->                                        --->
                                       --->                                        --->

Я хочу написать для этого интеграционный тест, который проверит, было ли сообщение в правильных каналах. Я сейчас нигде не обогащаю заголовки, поэтому я хотел использовать:

this.someChannel.receive(TIMEOUT)

к сожалению, насколько я понимаю, он блокирует только основной поток теста, а не все, поэтому он не может получать отправленные сообщения асинхронно. Я знаю, что существует что-то вроде:

this.someChannel.getReceiveCount()

, это дает мне хорошие результаты, но проверки этого мне недостаточно. Как с этим справиться, чтобы получать сообщения, отправленные в очереди асинхронно c способом?

РЕДАКТИРОВАТЬ: Важно, что мне это нужно, потому что сообщение изменяется во время прохождения рабочего процесса

1 Ответ

0 голосов
/ 10 февраля 2020

Вы можете добавить перехватчик каналов к этим каналам очереди в тесте для отслеживания всего, что проходит через эти каналы. Конечно, вам нужно иметь в тесте некоторый барьер для ожидания асинхронных сообщений или просто блокирования очереди, чтобы собрать их для проверки в конце теста. Другой способ заключается в том, чтобы смоделировать или шпионить за обработчиками сообщений между ними, но опять же с похожим CountDownLatch или BlockingQueue барьером потока для ожидания асинхронных сообщений. Больше информации в документах: https://docs.spring.io/spring-integration/docs/5.2.3.RELEASE/reference/html/testing.html#test -контекст

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...