2016-09-13 12 views
0

У меня есть набор интеграционных тестов, который создает полный контекст Spring для моего приложения, вычитает конечные точки в отношении другого приложения и запускает тесты, например, вызывает REST-сервис, а затем проверяет результат в базы данных, что другие веб-службы/REST-услуги были вызваны и так далее.Интеграционное тестирование JMS

В случаях, которые я хотел бы проверить, это потребление сообщений JMS, используя Spring Integration. Для этих тестовых случаев я создаю брокер ActiveMQ в памяти, размещаю на нем сообщение и проверяю, что потребление сообщения имеет желаемый результат. У этого подхода есть проблема, по которой я не могу найти хорошее решение.

Поскольку обработка сообщений происходит в потоке отдельно от моего тестового извещения, я должен подождать некоторое время, прежде чем проверять поведение. Сейчас я делаю это на Thread.sleep, но я не очень доволен этим. Во-первых, это добавляет время сборки, а во-вторых, оно подвержено случайным ошибкам, если они установлены слишком низко. Это приводит к тому, что каждый из этих тестов спал 2 секунды, чтобы быть уверенным.

Есть ли способ, которым я могу контролировать, было ли обработано сообщение? Можно ли, возможно, проверить брокер ActiveMQ через JmsTemplate?

ответ

1

Фигурные это:

Что-то вроде этого:

Boolean messageWaiting = true; 
while (messageWaiting) { 
    messageWaiting = 
     jmsTemplate.browse(myQueue, 
          (session, browser) -> browser.getEnumeration().hasMoreElements()); 
} 

При этом вместо нити сна, кажется, ждать достаточно долго для того, чтобы сообщение было потребляются, но не дольше.

 Смежные вопросы

  • Нет связанных вопросов^_^