Выбор ответа Senior Тестирование: JUnit 5 и Mockito обновлено
Нестабильный тест
Вопрос
Тест асинхронной обработки иногда падает на CI: в нём service.submit(task); Thread.sleep(100); assertTrue(done.get());. Как правильно исправить?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ждать условие с таймаутом (Awaitility) или синхронный executor. Фиксированная пауза либо слишком короткая для медленного CI, либо зря тормозит все запуски.
Варианты ответа
- Увеличить
Thread.sleepдо 1000 мс, чтобы CI точно успевал - Пометить тест
@Disabled, раз он падает не из-за кода - Перезапускать тест на CI до успеха через retry-плагин
- Ждать условие с таймаутом (Awaitility) или синхронный executorправильный ответ
Разбор
Фиксированная пауза либо слишком короткая для медленного CI, либо зря тормозит все запуски. Правильно ждать условие с верхней границей или подменить executor на синхронный и тестировать логику без потоков. Увеличенный sleep лишь делает падение реже. Отключение и перезапуски прячут проблему, а не решают.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.