У меня есть набор интеграционных тестов, который создает полный контекст Spring для моего приложения, вычитает конечные точки в отношении другого приложения и запускает тесты, например, вызывает REST-сервис, а затем проверяет результат в базы данных, что другие веб-службы/REST-услуги были вызваны и так далее.Интеграционное тестирование JMS
В случаях, которые я хотел бы проверить, это потребление сообщений JMS, используя Spring Integration. Для этих тестовых случаев я создаю брокер ActiveMQ в памяти, размещаю на нем сообщение и проверяю, что потребление сообщения имеет желаемый результат. У этого подхода есть проблема, по которой я не могу найти хорошее решение.
Поскольку обработка сообщений происходит в потоке отдельно от моего тестового извещения, я должен подождать некоторое время, прежде чем проверять поведение. Сейчас я делаю это на Thread.sleep
, но я не очень доволен этим. Во-первых, это добавляет время сборки, а во-вторых, оно подвержено случайным ошибкам, если они установлены слишком низко. Это приводит к тому, что каждый из этих тестов спал 2 секунды, чтобы быть уверенным.
Есть ли способ, которым я могу контролировать, было ли обработано сообщение? Можно ли, возможно, проверить брокер ActiveMQ через JmsTemplate?