ten*_*int 4 android mockito kotlin
为了进行测试,我编写了一个包装器,ViewModelProviders.of(...).get(...)以便我可以提供模拟:
class MyViewModelProvider {
fun <T : ViewModel> get(scope: Fragment, type: Class<T>) : T {
return ViewModelProviders.of(scope).get(type)
}
...
}
Run Code Online (Sandbox Code Playgroud)
然后在我的测试中:
匕首测试模块:
import com.nhaarman.mockito_kotlin.mock
...
fun provideMyViewModelProvider(): MyViewModelProvider {
return mock()
}
Run Code Online (Sandbox Code Playgroud)
在我的测试课中:
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)
...
Run Code Online (Sandbox Code Playgroud)
然而,whenever我收到错误:
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter scope
Run Code Online (Sandbox Code Playgroud)
我尝试了几件事:
any<Fragment>(), any<Class<ViewModel>>())与-->交换anyOrNull<Fragment>(), anyOrNull<Class<ViewModel>>()仍然得到相同的错误
尝试使用具体引用whenever(mockViewModelProvider.get(myFragment, MyViewModel::class.java)).thenReturn(mockViewModel)--> 调用实际方法而不是模拟方法
不知道我做错了什么......
找到了答案:
模拟的函数需要标记open或使用mock-maker-inline。
https://github.com/nhaarman/mockito-kotlin/wiki/Parameter-specified-as-non-null-is-null
| 归档时间: |
|
| 查看次数: |
13497 次 |
| 最近记录: |