Почему тесты медленные
Вопрос
Тесты проекта на Spring идут 25 минут. Как будете ускорять?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Посмотреть, сколько раз поднимается контекст
Унифицировать @MockitoBean и свойства, убрать лишние @DirtiesContext
Перевести тесты на слайсы и юнит-тесты
Один контейнер на весь прогон
Убрать sleep, параллелизм JUnit, разделение быстрых и медленных наборов
Что могут спросить следом
- Чем опасен параллельный запуск тестов со Spring?
- Как найти самые медленные тесты?
Разбор
Сначала измеряю: какие классы самые медленные и сколько раз стартует контекст, это видно по логам старта Spring. Обычно главная причина в кеше контекста: в каждом классе свой набор @MockitoBean или свойств, плюс @DirtiesContext. Выношу общую конфигурацию в базовые классы, чтобы контекст переиспользовался. Дальше перевожу тесты, которым не нужен весь контекст, на слайсы или юнит-тесты. Контейнеры базы и брокера делаю общими на прогон. Убираю Thread.sleep в пользу Awaitility. Если этого мало, разделяю быстрый набор для каждого коммита и медленный для слияния, включаю параллельный запуск классов там, где тесты не делят состояние.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.