我有一个如下的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
处理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") }
}