Выбор ответа Senior Тестирование в Spring обновлено

Почему тесты стали медленными

Вопрос

Набор из 200 тестовых классов с @SpringBootTest идёт 20 минут, в логе видно, что контекст поднимается десятки раз. Вероятная причина?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Разные @MockitoBean, свойства и профили дают разные ключи кеша. Spring TestContext кеширует контексты по ключу из конфигурации теста: классов конфигурации, профилей, свойств, моков, инициализаторов.

Варианты ответа

  1. Разные @MockitoBean, свойства и профили дают разные ключи кешаправильный ответ
  2. Spring никогда не кеширует контекст между тестовыми классами
  3. Слишком много @Test в одном классе, и контекст пересоздаётся
  4. JUnit 5 запускает каждый тестовый класс в отдельной JVM с новым контекстом

Разбор

Spring TestContext кеширует контексты по ключу из конфигурации теста: классов конфигурации, профилей, свойств, моков, инициализаторов. Любое отличие, например уникальный мок в одном классе, создаёт новый контекст. Плюс @DirtiesContext выбрасывает контекст из кеша. Решение: единый базовый класс с общим набором моков и свойств, слайсы вместо полного контекста. Число тестов в классе на это не влияет, JUnit по умолчанию работает в одной JVM.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.