Нестабильные тесты
Вопрос
Тесты во Flutter-проекте иногда падают без изменений в коде. Как вы найдёте и устраните причины?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Зависимость от реального времени и случайности: абстракция часов, `fakeAsync`, фиксированный seed
Реальная сеть и общий стейт между тестами: моки, сброс в `setUp`
Неправильная прокачка кадров: `pumpAndSettle` с бесконечной анимацией, ожидание без `pump`
Порядок тестов и глобальные синглтоны
Golden-тесты на разных ОС и шрифтах
Сбор статистики падений в CI, карантин и обязательное исправление
Что могут спросить следом
- Как протестировать debounce на 300 мс без ожидания?
- Почему синглтоны мешают тестам?
Разбор
Образцовый ответ: «Сначала собираю статистику: какие тесты падают и с какой частотой, повторяю их локально много раз подряд и в случайном порядке. Типичные причины: реальное время, когда тест зависит от DateTime.now или таймеров, тогда абстрагирую часы и использую fakeAsync, а в widget-тестах pump с длительностью. Реальная сеть или общий стейт: синглтон, оставшийся от прошлого теста, тогда подменяю зависимости и сбрасываю их в setUp. Неправильная прокачка кадров, например pumpAndSettle при бесконечной анимации. Golden-тесты на разных ОС. Найденный нестабильный тест временно помечаю и чиню в приоритете, потому что тесты, которым не верят, хуже отсутствия тестов»
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.