Для тестирования я написал оболочку для ViewModelProviders.of(...).get(...)
, чтобы я мог предоставить макет:
class MyViewModelProvider {
fun <T : ViewModel> get(scope: Fragment, type: Class<T>) : T {
return ViewModelProviders.of(scope).get(type)
}
...
}
А потом в моем тесте:
Тестовый модуль кинжала:
import com.nhaarman.mockito_kotlin.mock
...
fun provideMyViewModelProvider(): MyViewModelProvider {
return mock()
}
А в моем тестовом классе:
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)
...
Однако на линии с whenever
я получаю ошибку:
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter scope
Я пробовал пару вещей:
Обмен any<Fragment>(), any<Class<ViewModel>>())
с anyOrNull<Fragment>(), anyOrNull<Class<ViewModel>>()
-> все еще вызывает ту же ошибку
Пробовал с использованием конкретных ссылок whenever(mockViewModelProvider.get(myFragment, MyViewModel::class.java)).thenReturn(mockViewModel)
-> Вызывает реальный метод вместо макета
Не уверен, что я делаю не так ...