Je ne suis pas capable de comprendre comment tester cela un SharedFlow
avec replay=0
émis une valeur.
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.runBlocking
import org.junit.Test
class ShowcaseTest {
@Test
fun testIntSharedFlowFlow() {
val intSharedFlow = MutableSharedFlow<Int>()
runBlocking {
intSharedFlow.emit(1)
}
// Does not work as there is no buffer because MutableSharedFlow(replay=0)
assert(intSharedFlow.replayCache.first() == 1)
}
}
Si vous souhaitez tester avec Replay = 1, vous pouvez essayer d'émettre avant "Observer/collecter", alors avant le début du travail.
@Test
fun testIntSharedFlowFlow() = runBlockingTest{
val _intSharedFlow = MutableSharedFlow<Int>()
val intSharedFlow: SharedFlow = _intSharedFlow
val testResults = mutableListOf<Int>()
val job = launch {
intSharedFlow.toList(testResults)
}
_intSharedFlow.emit(5)
assertEquals(1, testResults.size)
assertEquals(5, testResults.first())
job.cancel()
}
N'oubliez pas d'annuler le travail, le bouton SharedFlow continuera de collecter et le test vous donnera une erreur ou même une boucle pour toujours.