是否可以使用模拟库进行模拟。
我有一堂课(删除了某些部分,试图简化问题)
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创建了一个接口,而是将其公开并注入了类型,则可以对其进行模拟。但是,Settings Manager的外部使用者不需要知道提取逻辑。我不确定用嘲笑是否可以嘲笑私有对象。