Назад к вопросам
Middle+
107
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

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

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