Тест закрытия функции расширения в Котлине - PullRequest
0 голосов
/ 15 апреля 2019

Предположим, у нас есть следующий код:

@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()?

...