в данной функции лямбда действительно вызвалась только после delay?
private val scope = CoroutineScope(Dispatchers.IO)
override fun doDelayed(delayMs: Long, action: suspend () -> Unit) {
job = scope.launch {
delay(delayMs)
action()
}
}
JUnit 5, mockk, kotlin-coroutines-test
Насколько помню идею, с помощью этого (там и пример есть): https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-test/kotlinx.coroutines.test/-delay-controller/advance-time-by.html https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-test/kotlinx.coroutines.test/-test-coroutine-scheduler/advance-time-by.html
О, спасибо, попробую! Правда за порядок выполнения мне эта функция ничего не скажет. Только что delay был. А до или после лямбды - непонятно
Так вы в лямбде выставляйте флаг и проверяйте его до задержки и после
А как я могу до задержки проверить флаг? Перед вызовом тестируемый функции? Это не будет иметь никакого смысла
Сразу после вызова. Потом advanceTimeBy на время задержки, и после этого снова.
Аа, понял, звучит логично, спасибо!
Ещё можно просто в лямбде проверять текущее "виртуальное" время
Да, я в эту сторону думал, но первый вариант кажется получше
Обсуждают сегодня