您可以使用 mockk 验证属性设置器吗?

Kor*_*lis 7 verify kotlin mockk

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

verify(mockedInteractor).setIndex(1);

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

verify { mockedInteractor.index = 1 }

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

verify { mockedInteractor.setIndex(1) }

有没有办法验证setter?

Myl*_*ett 11

我想知道这是否是关于 Mockk 的早期版本的问题,毕竟,这一个老问题。

verify { mockedInteractor.index = 1 }
Run Code Online (Sandbox Code Playgroud)

正如它所说的那样 - 它验证mockedInteractor.index设置为1. 如果你不相信我,就试试吧。尝试设置为产品代码之外mockedInteractor.index的其他内容,然后观察此测试失败。1

也许这是一个 Mockk 错误,现已修复。


xil*_*lef 7

您可以尝试捕获:

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

  • 哇谢谢!您还可以使用“just running”代替空答案:“every {mockBar.foo = capture(fooSlot) } just running” (2认同)

Ham*_*mer 7

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

verify { mockedInteractor setProperty MockedInteractor::index.name value 1 }
Run Code Online (Sandbox Code Playgroud)

班级MockedInteractor在哪里mockedInteractor


小智 5

是的你可以:

verify { mockedInteractor setProperty "index" value 1 }
Run Code Online (Sandbox Code Playgroud)

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