Почему тесты стали медленными
Вопрос
Набор из 200 тестовых классов с @SpringBootTest идёт 20 минут, в логе видно, что контекст поднимается десятки раз. Вероятная причина?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Разные @MockitoBean, свойства и профили дают разные ключи кешаправильный ответ
- Spring никогда не кеширует контекст между тестовыми классами
- Слишком много @Test в одном классе, и контекст пересоздаётся
- JUnit 5 запускает каждый тестовый класс в отдельной JVM с новым контекстом
Разбор
Spring TestContext кеширует контексты по ключу из конфигурации теста: классов конфигурации, профилей, свойств, моков, инициализаторов. Любое отличие, например уникальный мок в одном классе, создаёт новый контекст. Плюс @DirtiesContext выбрасывает контекст из кеша. Решение: единый базовый класс с общим набором моков и свойств, слайсы вместо полного контекста. Число тестов в классе на это не влияет, JUnit по умолчанию работает в одной JVM.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.