Понадобилось необычное.
Есть сервис, писанный на Spring. В нем есть имплементации некоторого функционала, заточенные под разные облака. Сделано через "профили".
Далее. Я пишу некоторый набор юнит-тестов, общий для всех облаков. И я хочу чтоб тест запускался N раз, где N — количество поддерживаемых облачных профилей. На данный момент только Azure и AWS, но скоро добавится Google и прочие.
Фактически, мне бы нужно переинициализировать Spring ApplicationContext для каждой такой итерации — загрузили профиль Azure, прогнали все тесты, перешли к следующему профилю. На данный момент я пишу в заголовке класса с тестом:
@ActiveProfiles({ "Azure" })
И если делать так же, то мне придется тупо копировать одни и те же тесты, меняя используемый профиль. Чего не хотелось бы. Пока на ум приходит колдовство с Maven'ом, но в этом случае такие тесты нельзя будет запустить из IDEA, перебор профилей получится только из Maven.
Кто-нибудь делал похожее? Где б почитать/посмотреть примеры?
Спрнгом цикл не получится, потому что сам Спринг знает только про активные профили.
> @ActiveProfiles({ "Azure" })
Можно убрать привязку тестов к профилю и стартовать что-ты-там-стартуешь несколько раз, передавая профиль в командной строке.
Можно написать шелл скрипт, который поищет доступные профили в директории и запустит в цикле, хотя скорее всего выяснится, что не совсеми профилями надо. Лучше шелл скрипту в явном виде список профилей дать и пусть он цикл гоняет.
AK>И если делать так же, то мне придется тупо копировать одни и те же тесты, меняя используемый профиль. Чего не хотелось бы. Пока на ум приходит колдовство с Maven'ом, но в этом случае такие тесты нельзя будет запустить из IDEA, перебор профилей получится только из Maven.
Для ИДЕИ можно сохранить конфигурации с прописанными профилями и пускать их по одной вручную. Или в качестве извращения организовать из них цепочку — в ИДЕЕ можно для каждой запускаемой конфигурации прописать какую конфигурацию запустить перед этой.