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

07-27 16:51