kotlin - io.mockk.MockKException:找不到答案:SavedStateHandle(#1).set(Key, Something)
问题描述
我有一个 ViewModel 类如下(简化以演示我面临的问题)
class MyViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {
init {
savedStateHandle.set(KEY, "Something")
}
}
我有一个 MockK 测试类如下
@Test
fun `test something simple`() {
val savedStateHandle = mockk<SavedStateHandle>()
val viewModel = MyViewModel(savedStateHandle)
verify { savedStateHandle.set(MyViewModel.KEY, "Something") }
}
通过运行测试,我得到以下错误
io.mockk.MockKException: no answer found for: SavedStateHandle(#1).set(Key, Something)
我想我也需要处理set
for SavedStateHandle
。我怎么能这样做MockK
?
解决方案
看起来我需要relaxed = true
我的 Mock,让它只返回一个默认值。
@Test
fun `test something simple`() {
val savedStateHandle = mockk<SavedStateHandle>(relaxed = true)
val viewModel = MyViewModel(savedStateHandle)
verify { savedStateHandle.set(MyViewModel.KEY, "Something") }
}
另一种选择是模拟返回值......
@Test
fun `test something simple`() {
val savedStateHandle = mockk<SavedStateHandle>()
every {savedStateHandle.set(MyViewModel.KEY, "Something") } returns Unit
val viewModel = MyViewModel(savedStateHandle)
verify { savedStateHandle.set(MyViewModel.KEY, "Something") }
}
推荐阅读
- node.js - 404 无法使用 Express 和 hbs 发布
- django - 在特定视图函数内不管登录状态如何,request.user = AnonymousUser。有没有办法解决它?
- java - 致命异常 java.lang.NoSuchMethodError:没有静态方法 isDeviceProtectedStorage
- angular - 在 ngFor 中获取模板引用
- c - 如何解决写读的 SPI 问题?
- c# - securitymanager.policyhierarchy() 已过时,它的替代品是什么?
- ios - 在通知扩展中单击了通信按钮
- android - 使用 RecyclerView 中的 EditText 值在回收器视图项中保存多个复选框选择
- kubernetes - Kubectl 查找 yaml 位置
- node.js - Firebase CLI 如何更改项目范围?firebase init(错误:403,调用者没有权限)使用另一个帐户的项目 url