您可以使用 mockk 验证 属性 setter 吗?

Can you verify a property setter using mockk?

我们在 Java 和 Mockito 中进行了一些测试,我们正在逐步将其转换为 Kotlin 和 Mockk。但是有一个问题。这条简单的线:

verify(mockedInteractor).setIndex(1);

当我们将它移动到 mockk 时,我们得到:

verify { mockedInteractor.index = 1 }

这当然通过了测试,因为它实际上并没有检查 index 是否设置为 1。它只是将 mock 的变量设置为 1。下面的效果相同。

verify { mockedInteractor.setIndex(1) }

有没有办法验证设置器?

您可以尝试捕获:

val fooSlot = slot<String>()
val mockBar = mockk<Bar>()
every { mockBar.foo = capture(fooSlot) } answers { }
assertEquals(fooSlot.captured, "expected")

是的,你可以:

verify { mockedInteractor setProperty "index" value 1 }

这里有更多例子https://mockk.io/#private-functions-mocking--dynamic-calls

没有硬编码字符串的紧凑解决方案:

verify { mockedInteractor setProperty MockedInteractor::index.name value 1 }

其中 MockedInteractormockedInteractor class

您现在可以在定义模拟时放宽对单元函数的这一要求。

val foo = mockk<Foo>(relaxUnitFun = true)

在您的 mock 上启用此设置意味着您在调用验证单元函数时不需要使用 justRun 或该代码的任何变体(根据 Mockk documentation)。