Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mocked Object with Mockito Kotlin Not Stubbing Method

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?

like image 617
StuStirling Avatar asked Jul 12 '17 11:07

StuStirling


1 Answers

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.

like image 87
nhaarman Avatar answered Nov 19 '22 12:11

nhaarman