Макет частного объекта в Android - PullRequest
1 голос
/ 08 мая 2019

Можно ли издеваться с помощью библиотеки mockk.

У меня есть класс (некоторые детали удалены, попытался упростить проблему)

class SettingsManager(val application: Application) {

    private val fetcher: Fetcher = Fetcher(application)

    suspend fun fetchRemote() {
        fetcher.doFetch()
    }
}

class Fetcher(val application: Application) {
    fun doFetch() {
        if (canFetch()) {
            // make GET request
        }
    }

    fun canFetch() {
        if (application.isOnline()) {
            return true
        }
        return false
    }
}

Extension


@RequiresPermission(value = Manifest.permission.ACCESS_NETWORK_STATE)
fun Context.isOnline(): Boolean {
    val connectivityManager = this
            .getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
    connectivityManager?.apply {
        val netInfo = activeNetworkInfo
        netInfo?.let {
            if (it.isConnected) return true
        }
    }
    return false
}

Я пытаюсь в основном издеваться над работой, которую делает частный класс Фетчер. Я думал, что смогу сделать:

val mockFetcher = mockk<Fetcher>()
every { mockFetcher.canFetch() } returns true

Но это не издевается над частным случаем. Есть ли способ издеваться над частным экземпляром? Я понимаю, что если я создал интерфейс для частного сборщика, а вместо этого сделал его общедоступным и ввел тип, я могу поиздеваться над ним. Но логику извлечения не нужно знать внешним потребителям диспетчера настроек. Я не был уверен, возможно ли издеваться над личным объектом с помощью mockk.

...