Mockito-Kotlin Whenever Arguments - Parameter Specified as Non-Null Is Null

For testing I wrote a wrapper for ViewModelProviders.of(...).get(...) so that I can supply a mock:

class MyViewModelProvider {
    fun <T : ViewModel> get(scope: Fragment, type: Class<T>) : T {
        return ViewModelProviders.of(scope).get(type)
    }

    ...
}

And then in my test:

Dagger TestModule:

import com.nhaarman.mockito_kotlin.mock

...

fun provideMyViewModelProvider(): MyViewModelProvider {
        return mock()
}

And in my test class:

import com.nhaarman.mockito_kotlin.any
import com.nhaarman.mockito_kotlin.anyOrNull
import com.nhaarman.mockito_kotlin.whenever
...
@Inject
lateinit var mockViewModelProvider: MyViewModelProvider
...
val mockViewModel = mock<MyViewModel>()

whenever(mockViewModelProvider.get(any<Fragment>(), any<Class<ViewModel>>())).thenReturn(mockViewModel)
...

However on the line with whenever I get the error:

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter scope

I've tried a couple things:

  1. Swapping any<Fragment>(), any<Class<ViewModel>>()) with anyOrNull<Fragment>(), anyOrNull<Class<ViewModel>>() --> still get the same error

  2. Tried using concrete references whenever(mockViewModelProvider.get(myFragment, MyViewModel::class.java)).thenReturn(mockViewModel) --> Calls actual method instead of mock

Not sure what I'm doing wrong...

2

1 Answer

Found the answer:

The mocked function needs to be marked open or use mock-maker-inline.

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Chloe Bennett

Chloe Bennett

Culture, Media & Entertainment Columnist

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.

Share this article
Twitter Facebook Pinterest