Выбор ответа Senior Тестирование: JUnit 5 и Mockito обновлено

Медленные интеграционные тесты

Вопрос

Интеграционные тесты с Testcontainers идут 15 минут, потому что каждый тестовый класс поднимает свой PostgreSQL. Что сделать в первую очередь?

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

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

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

Коротко

Правильный ответ: Один static-контейнер на весь прогон и очистка данных между тестами. Старт контейнера стоит секунды, умноженные на число классов.

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

  1. Перейти на встроенную H2, чтобы вообще не поднимать контейнеры
  2. Один static-контейнер на весь прогон и очистка данных между тестамиправильный ответ
  3. Запускать интеграционные тесты реже, например раз в неделю на CI
  4. Добавить Thread.sleep после старта, чтобы контейнер успел прогреться

Разбор

Старт контейнера стоит секунды, умноженные на число классов. Общий static-контейнер, который поднимается один раз на JVM, плюс очистка или откат данных между тестами резко сокращают время. В Spring ещё помогает переиспользование контекста. H2 ускорит, но проверяет не ту СУБД. Редкий запуск ухудшает обратную связь. sleep ничего не ускоряет.

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

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

Термины по теме