Is this possible to mock using mockk library.
I have a class (some parts removed, tried to simplify the problem)
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 } I'm trying to basically mock the work that the private class Fetcher does. I thought I could do:
val mockFetcher = mockk<Fetcher>() every { mockFetcher.canFetch() } returns true But that does not mock the private instance. Is there a way to mock the private instance? I understand that if I created an interface for the private Fetcher and instead made it public and injected the type, I can mock it. But the logic for fetching doesn't need to be known to the outside consumers of Settings Manager. I wasn't sure if mocking the private object was possible with mockk.