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

Нестабильный тест

Вопрос

Тест асинхронной обработки иногда падает на CI: в нём service.submit(task); Thread.sleep(100); assertTrue(done.get());. Как правильно исправить?

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

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

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

Коротко

Правильный ответ: Ждать условие с таймаутом (Awaitility) или синхронный executor. Фиксированная пауза либо слишком короткая для медленного CI, либо зря тормозит все запуски.

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

  1. Увеличить Thread.sleep до 1000 мс, чтобы CI точно успевал
  2. Пометить тест @Disabled, раз он падает не из-за кода
  3. Перезапускать тест на CI до успеха через retry-плагин
  4. Ждать условие с таймаутом (Awaitility) или синхронный executorправильный ответ

Разбор

Фиксированная пауза либо слишком короткая для медленного CI, либо зря тормозит все запуски. Правильно ждать условие с верхней границей или подменить executor на синхронный и тестировать логику без потоков. Увеличенный sleep лишь делает падение реже. Отключение и перезапуски прячут проблему, а не решают.

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

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

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