Назад к вопросам
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 |
Нет |