首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每当参数指定为非空参数时mockito-kotlin都为空。

每当参数指定为非空参数时mockito-kotlin都为空。
EN

Stack Overflow用户
提问于 2019-01-04 23:19:06
回答 1查看 11.3K关注 0票数 4

为了进行测试,我为ViewModelProviders.of(...).get(...)编写了一个包装器,以便提供一个模拟:

代码语言:javascript
复制
class MyViewModelProvider {
    fun <T : ViewModel> get(scope: Fragment, type: Class<T>) : T {
        return ViewModelProviders.of(scope).get(type)
    }

    ...
}

然后在我的测试中:

匕首TestModule:

代码语言:javascript
复制
import com.nhaarman.mockito_kotlin.mock

...

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

在我的考试课上:

代码语言:javascript
复制
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的过程中,我得到了错误:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter scope

我试过几件事:

  1. any<Fragment>(), any<Class<ViewModel>>())anyOrNull<Fragment>(), anyOrNull<Class<ViewModel>>() -仍然得到相同的错误。
  2. 尝试使用具体引用whenever(mockViewModelProvider.get(myFragment, MyViewModel::class.java)).thenReturn(mockViewModel) ->调用实际方法而不是模拟

不知道我做错了什么..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-05 15:01:39

找到了答案:

模拟的函数需要标记为open或使用模拟制造者内联。

https://github.com/nhaarman/mockito-kotlin/wiki/Parameter-specified-as-non-null-is-null

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54047452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档