简体   繁体   中英

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?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM