您可以使用 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 }
其中 MockedInteractor
是 mockedInteractor
class
您现在可以在定义模拟时放宽对单元函数的这一要求。
val foo = mockk<Foo>(relaxUnitFun = true)
在您的 mock 上启用此设置意味着您在调用验证单元函数时不需要使用 justRun
或该代码的任何变体(根据 Mockk documentation)。
我们在 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 }
其中 MockedInteractor
是 mockedInteractor
class
您现在可以在定义模拟时放宽对单元函数的这一要求。
val foo = mockk<Foo>(relaxUnitFun = true)
在您的 mock 上启用此设置意味着您在调用验证单元函数时不需要使用 justRun
或该代码的任何变体(根据 Mockk documentation)。