这是否可以使用 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 模拟私有对象。