Выбор ответа Middle Тестирование обновлено
Виртуальное время в runTest
Вопрос
Код во ViewModel ждёт delay(30_000) перед повтором запроса. Сколько реального времени займёт тест в runTest?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Почти нисколько: runTest использует виртуальное время. runTest работает на TestCoroutineScheduler с виртуальными часами: когда все корутины ждут, планировщик сразу переводит время вперёд.
Варианты ответа
- 30 секунд:
runTestждёт реальные задержки, но параллелит тесты - Тест упадёт по таймауту
runTest, который по умолчанию 10 секунд - Почти нисколько:
runTestиспользует виртуальное времяправильный ответ - 60 секунд: задержка плюс повтор запроса с тем же
delay
Разбор
runTest работает на TestCoroutineScheduler с виртуальными часами: когда все корутины ждут, планировщик сразу переводит время вперёд. Поэтому delay не тормозит тесты, а advanceTimeBy позволяет проверять состояние в нужный момент. Условие: код должен использовать тестовый диспетчер, а не захардкоженный Dispatchers.IO, иначе задержка будет реальной.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.