У меня есть приложение, которое использует постоянные очереди JMS.Представьте, что у меня сбой приложения после прочтения сообщения и до его подтверждения.Постоянная очередь должна предоставить это сообщение снова после перезапуска приложения.Как я могу реализовать интеграционный тест junit для этого?Я тестирую перезапуск приложения после (смоделированного) сбоя приложения в середине «транзакции».
Я рассматривал @DirtiesContext
как способ сброса всех частей Spring приложения: чтение конфигов, воссозданиеJMS-соединения.Я мог бы иметь один контрольный пример A) написать сообщение, разрешить чтение сообщения и затем «выйти» (закрыть контекст весны?) Без подтверждения.Затем другой контрольный пример (после перезагрузки контекста B) считывает сообщение и утверждает, что оно не было потеряно после перезапуска смоделированного приложения.Но встроенная перезагрузка контекста, предоставляемая @DirtiesContext
, происходит только между тестовыми примерами.И JUnit не предоставляет средства для последовательности двух тестовых случаев или зависимости B) от A), так что A) всегда будет работать (и запускаться первым), если вы решите запустить B).
ВВ прошлой жизни я написал ручной код, который закрывал весенний контекст и вручную перезапустил новый контекст.Например, между А) и Б).Это может быть сделано в одном тестовом случае.Полагаю, что с @RunWith(SpringRunner.class)
это не будет хорошо играть, и кажется довольно старой школой.Это действительно единственный вариант, учитывая всю замечательную поддержку Spring и JUnit в наши дни?
Это кажется довольно полезной техникой.Его можно использовать для проверки повторного поступления сообщений после их отката (и они застряли в очереди недоставленных сообщений);или что порядковые номера, записанные в БД, действительно сохраняются во время «сбоя».Любое количество случаев сбоев, которые могут повлиять на следующий запуск приложения из-за постоянных (или нет) данных.Как мы имитируем весенний перезапуск в тестах junit?Либо в рамках одного теста, либо создайте последовательность зависимых тестов с @DirtiesContext
между ними.