在Kotlin中测试扩展功能的关闭

时间:2019-04-14 21:37:00

标签: testing kotlin junit kotlin-coroutines

假设我们有以下代码:

@ExperimentalCoroutinesApi
fun ProducerScope<DownloadableDataDto<out User>>.findInteresting(input: ReceiveChannel<DownloadableDataDto<out User>>,
                                                                 communitiesCount: Int,
                                                                 userCountMap: MutableMap<User, Int> = ConcurrentHashMap()) = createProducer(input) {
    if (userCountMap.compute(it.data!!) { _, value ->
                if (value == null) 1 else value + 1
            } == communitiesCount) send(it)
}

此代码检查用户是否是所有communitiesCount社区的一部分。但是,此逻辑包含在createChannel()高阶函数中,目前我不希望对其进行测试。有没有办法只测试内部?我想我也可以将其提取到一个单独的函数中,对吧?

如果我这样做的话,我们可以改成这样:

@ExperimentalCoroutinesApi
fun ProducerScope<DownloadableDataDto<out User>>.findInteresting(input: ReceiveChannel<DownloadableDataDto<out User>>,
                                                                 communitiesCount: Int,
                                                                 userCountMap: MutableMap<User, Int> = ConcurrentHashMap()) = createProducer(input) {
    sendIfInteresting(it, communitiesCount, userCountMap)
}

@ExperimentalCoroutinesApi
private suspend fun ProducerScope<DownloadableDataDto<out User>>.sendIfInteresting(userDto: DownloadableDataDto<out User>,
                                                                                   communitiesCount: Int,
                                                                                   userCountMap: MutableMap<User, Int>) {
    if (userCountMap.compute(userDto.data!!) { _, value ->
                if (value == null) 1 else value + 1
            } == communitiesCount) send(userDto)
}

我该如何模拟send(userDto)通话?我可以模拟ProducerScope对象,但是如何调用真正的sendIfInteresting()方法呢?

0 个答案:

没有答案