Middle+
70
questionbank

В чем разница между runBlocking, runBlockingTest и runTest?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech
  • runBlocking: Блокирующая функция, запускающая новый корутин и ожидающая его завершения. Используется в основном в тестах или в функциях main, где необходима блокировка. Не подходит для продакшн-кода в UI-потоке.
  • runBlockingTest (из kotlinx-coroutines-test до версии 1.6): Блокирующая функция, оптимизированная для тестирования. По умолчанию использует TestCoroutineDispatcher, позволяя управлять временем и немедленно выполнять отложенные задачи.
  • runTest (из kotlinx-coroutines-test с версии 1.6): Неблокирующая функция, созданная для замены runBlockingTest. Использует TestDispatcher. Позволяет более гибко тестировать сценарии с задержками и параллельными задачами, автоматически перематывая время.

Основные отличия:

FeaturerunBlockingrunBlockingTest (deprecated)runTest
Блокирование потокаДаДаНет (в рамках теста)
Управление временемНет (использует системное время)Да (через TestCoroutineDispatcher)Да (через TestDispatcher)
Использование в тестахВозможно, но не оптимизированоОсновное назначениеОсновное назначение
Версия kotlinx-coroutines-testНе часть тестовой библиотекиДо 1.61.6+
ЗаменаНетrunTestНет