1

这是否可以使用 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
}

我试图基本上模拟私有类 Fetcher 所做的工作。我以为我可以这样做:

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

但这并不能模拟私有实例。有没有办法模拟私有实例?我知道,如果我为私有 Fetcher 创建了一个接口,而是将其公开并注入类型,我可以模拟它。但是设置管理器的外部消费者不需要知道获取的逻辑。我不确定是否可以使用 mockk 模拟私有对象。

4

0 回答 0