Выбор ответа Middle Тестирование обновлено

Виртуальное время в runTest

Вопрос

Код во ViewModel ждёт delay(30_000) перед повтором запроса. Сколько реального времени займёт тест в runTest?

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

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

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

Коротко

Правильный ответ: Почти нисколько: runTest использует виртуальное время. runTest работает на TestCoroutineScheduler с виртуальными часами: когда все корутины ждут, планировщик сразу переводит время вперёд.

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

  1. 30 секунд: runTest ждёт реальные задержки, но параллелит тесты
  2. Тест упадёт по таймауту runTest, который по умолчанию 10 секунд
  3. Почти нисколько: runTest использует виртуальное времяправильный ответ
  4. 60 секунд: задержка плюс повтор запроса с тем же delay

Разбор

runTest работает на TestCoroutineScheduler с виртуальными часами: когда все корутины ждут, планировщик сразу переводит время вперёд. Поэтому delay не тормозит тесты, а advanceTimeBy позволяет проверять состояние в нужный момент. Условие: код должен использовать тестовый диспетчер, а не захардкоженный Dispatchers.IO, иначе задержка будет реальной.

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

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