Вы запускаете сопрограмму, которая приостанавливается на 1 секунду перед установкой data
на 1. Ваш тест просто вызывает doSomething
, но не ждет, пока data
фактически не будет установлен.Если вы добавите еще один, более длинный delay
, к тесту он будет работать:
@Test
fun coroutineDelay() = runBlocking {
...
viewModel.doSomething()
delay(1100)
...
}
Вы также можете сделать так, чтобы сопрограмма возвращала Deferred
, который можно подождать:
fun doSomething(): Deferred<Unit> {
return async {
delay(1000)
data = 1
}
}
С await
больше нет необходимости откладывать ваш код:
val model = SimpleViewModel()
model.doSomething().await()