android - mockito-kotlin 每当参数 - 指定为非 null 的参数为 null
问题描述
为了测试,我编写了一个包装器,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)
--> 调用实际方法而不是模拟
不知道我做错了什么......
解决方案
找到了答案:
模拟函数需要标记open
或使用mock-maker-inline。
https://github.com/nhaarman/mockito-kotlin/wiki/Parameter-specified-as-non-null-is-null
推荐阅读
- javascript - 使用 java 脚本创建的锚标记调用指向成功或失败的 API 调用
- java - 如何将函数插入目录/哈希表
- java - 尝试将行添加到 DefaultTableModel 模型时出现 Java 空指针异常
- r - R - 计划比较中完全关闭的自由度(使用 afex - aov_ez - emmeans - 对)?
- linux - 如何在linux中使用单个命令调用程序?
- javascript - 带有增量的 IF 语句,并显示值
- node.js - 我可以使用 lambda:invoke 调用 AWS Lambda express 应用程序吗?
- regex - sed:匹配两行并插入一行
- ejabberd - 集群 ejabberd 的 MUC 和 PubSub 主机
- python - Python Websocket - ConnectionRefusedError:[Errno 111] 连接被拒绝