В новом проекте, над которым я сейчас работаю, у меня вообще нет зависимости от RxJava, потому что до сих пор мне это не было нужно - сопрограммы довольно изящно решают проблему потоковой передачи.
На этом этапе я наткнулся на требование иметь BehaviorSubject
-подобное поведение , где можно подписаться на поток данных и получать самое последнее значение при подписке. Как я узнал, Channel
обеспечивают очень похожее поведение в Котлине, поэтому Я решил попробовать.
Из этой статьи я узнал, что _3 _ - это тип канала, который имитирует BehaviorSubject
, поэтому я объявил следующее:
class ChannelSender {
val channel = ConflatedBroadcastChannel<String>()
fun sendToChannel(someString: String) {
GlobalScope.launch(Dispatchers.Main) { channel.send(someString) }
}
}
Для прослушивания канала делаю так:
class ChannelListener(val channelSender: ChannelSender) {
fun listenToChannel() {
channelSender.channel.consumeEach { someString ->
if (someString == "A") foo.perform()
else bar.perform()
}
}
}
Это работает, как ожидалось, но на данный момент у меня возникли трудности с пониманием того, как проводить модульное тестирование ChannelListener
.
Я пытался найти что-то связанное с здесь, но ни один из example-channel-**.kt
классов не помог.
Любая помощь, предложение или исправление, связанные с моими неверными предположениями, приветствуются. Спасибо.