首页 > 解决方案 > 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)

我想我也需要处理setfor SavedStateHandle。我怎么能这样做MockK

标签: kotlinmockkviewmodel-savedstate

解决方案


看起来我需要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") }
}

推荐阅读