Блин, почему так сложно писать тесты на корутины и...
# russian
e
Блин, почему так сложно писать тесты на корутины и флоу?
Как легко протестировать, что flow.count() == 0?
b
чаще всего просто
runBlocking
(не runBlockingTest) достаточно, т.е.
Copy code
fun test() = runBlocking { 
    assertEquals(0, flow.count())
}
еще есть https://github.com/cashapp/turbine для тестирования flow
e
Денис спасибо, но такой пример просто виснет
В турбине пока нет решения для проверки пустого флоу
b
если он виснет, то скорее всего что-то не так с флоу, возможно там stateflow/sharedflow?
a
Он висенет если это бесконечный Flow
Для того, чтобы "не висло" поставьте таймаут
e
Это бесконечный флоу, и только тестировать его с таймаутом? Можно так чтобы тестовый контекст завершал все дочерние джобы и проверял бесконечные флоу? Тогда не нуюен таймаут. Наверное такое возможно для турбины написать. Гляну на выходных.
Спасибо!
a
Ну в общем случае нет возможности проверить окончание flow. Потому что он может выдать элемент в неопределенном будущем ленивым образом. Он будет ожидать следующий элемент пока не словит отмену
a
В целом да, тестировать корутины бывает сложно. Но тестировать многопоточный код БЕЗ корутин - это намного сложнее 🤯
e
plus one С корутинами обычно можно одно-поточный тест написать. Иногда все-равно приходится ломать голову из-за асинхронности, но сильно меньше чем приходится при тестировании многопоточного кода.
👍 1