Я хочу выполнить тест JUnit для приложения с использованием Spring-Integration. То, что я хочу, чтобы проверить это:Как проверить завершение обработки сообщения или дождаться завершения?
- Если сообщение было должным образом обработаны службами активатора, подключенного к каналу Я пошлю
- Если была правильная процедура обработки сообщения об ошибке вызывается в случае каких-либо ошибок
Я использую JMocikt, чтобы проверить, вызваны ли ожидаемые методы. Я начинаю тест, вызывая send
на канале сообщений.
Проблема в следующем: Как подождать завершения обработки сообщений? Весенняя интеграция порождает несколько потоков, и отправка по каналу сообщений немедленно возвращается. То, что я уже пытался это:
- Использования
IntegrationMBeanExporter.stopActiveComponents(false, 0)
- это не удается из-за прерывания потока - Попытка обслуживания активаторы цепи (в первую очередь: фактический вызов, второй: уведомления о завершении) - это не удается, потому что активатор службы при тестировании возвращается
null
, и в этом случае он не может быть прикован. Кроме того, мне это не нравится, потому что я должен изменить тестовую конфигурацию SI.
Любые подсказки?
Пожалуйста, не прокомментируйте, что вы не выполняете реальный блок, но тестирование интеграции и т. Д. Я знаю, что делаю.
Атрибут заказа делает выполнение последовательным? – Marcin
Порядок разбора используется по умолчанию; Я предпочитаю добавлять явный атрибут порядка каждому подписчику 1, 2, 3 и т. Д. Не больно, если есть только один абонент, и он делает это ясно. Они будут вызываться последовательно, пока ' ' не имеет многопоточного исполнителя задач. По умолчанию каждый абонент будет вызываться последовательно в потоке, который отправляется на канал. –
Ваш ответ очень полезен, спасибо. Одной из проблем, которые я до сих пор остается, является тот факт, что канал ошибок (насколько мне известно) используется только с асинхронными вызовами. Это вносит большие изменения в процедуру тестирования. – Marcin