Приносим извинения за вопрос, который, вероятно, является очень любительским. Я начинаю разбираться с потоками и испытываю проблемы с тестированием, когда дело касается MutableSharedFlow
.
Ниже приводится простейший пример, который я могу построить, воссоздающий проблему:
@ExperimentalCoroutinesApi
@ExperimentalTime
class MyExampleTest {
val testDispatcher: TestCoroutineDispatcher = TestCoroutineDispatcher()
@Test
fun test() = testDispatcher.runBlockingTest {
val sharedFlow = MutableSharedFlow<String>()
sharedFlow.take(2).collect {
println(it)
}
sharedFlow.tryEmit("Hello")
sharedFlow.tryEmit("World")
}
}
Это приводит к следующей ошибке:
java.lang.IllegalStateException: This job has not completed yet
at kotlinx.coroutines.JobSupport.getCompletionExceptionOrNull(JobSupport.kt:1187)
at kotlinx.coroutines.test.TestBuildersKt.runBlockingTest(TestBuilders.kt:53)
at kotlinx.coroutines.test.TestBuildersKt.runBlockingTest(TestBuilders.kt:80)
at com.example.MyExampleTest.test(MyExampleTest.kt:22)
Исходя из моего ограниченного понимания, я думаю, что это как-то связано с тем, что SharedFlow
никогда не завершается. Но я думал, что наличие take(2)
смягчит это. Мы ценим любые предложения!