单元测试Kotlin的ConflatedBroadcastChannel行为

时间:2019-07-02 08:24:45

标签: kotlin listener channel kotlin-coroutines behaviorsubject

在我目前正在从事的新项目中,我根本没有RxJava依赖项,因为直到现在我都不需要RxJava依赖项-协程很好地解决了线程问题。

在这一点上,我偶然发现了要求具有类似BehaviorSubject的行为,即可以订阅数据流并在订阅时获得最新的值。据我了解,Channel在Kotlin中的行为非常相似,所以我决定尝试一下。

根据我所了解的this文章,ConflatedBroadcastChannel是模仿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

我试图找到与here相关的内容,但是example-channel-**.kt类都没有帮助。

感谢与我的错误假设有关的任何帮助,建议或纠正。谢谢。

1 个答案:

答案 0 :(得分:0)

使用help of Alexey,我可以设法获得以下代码,从而回答了这个问题:

BSpline