I have the following code:
@RunWith(MockitoJUnitRunner::class)
class OnboardingViewModelTest {
@Mock lateinit var authService : AuthService
lateinit var internetProvider: InternetStatusProvider
private lateinit var viewModel: OnboardingViewModel
@Before
fun setup() {
internetProvider = mock()
whenever(internetProvider.hasInternet()).thenReturn(true)
}
The constructor of InternetStatusProvider
looks like so:
InternetStatusProvider(context:Context)
I am getting a NullPointerException
when stubbing the internetProvider.hasInternet()
method because that method's implementation uses the context
passed in the constructor and the real method is being called?
What am I missing here? the whole point is to stub the real implementation of this method?
Mockito cannot stub final methods. If you try to execute a final method from a mocked instance, the real code will be executed. Since Kotlin's functions are final
by default, you'd have to add the open
modifier to the function.
There is also an incubating feature in Mockito that does allow mocking of final classes and methods, which may be worth a look.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With