Какие знаешь инструменты тестирования Coroutine

«Какие знаешь инструменты тестирования Coroutine» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

JUnit и MockK для unit-тестов с runTest (заменяет runBlocking в JUnit 5). Для тестирования таймингов — TestCoroutineScheduler из kotlinx-coroutines-test.

Пример:

@Test
fun testCoroutine() = runTest {
    val repo = mockk<Repo>()
    coEvery { repo.fetchData() } returns "test"  
    val result = repo.fetchData()  
    assertEquals("test", result)  
    coVerify { repo.fetchData() }  
}

Нюансы:

  • runTest автоматически пропускает задержки (delay)
  • Для Flow используйте turbine или toList()
  • Избегайте Dispatchers.IO в тестах — заменяйте на StandardTestDispatcher