Reputation: 16191
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?
Upvotes: 6
Views: 3527
Reputation: 100388
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.
Upvotes: 21