Bad*_*ler 3 unit-testing kotlin mockk
我知道,为了模拟方法的响应方式,您必须使用
every { instanceX.methodB() } returns "42"
Run Code Online (Sandbox Code Playgroud)
我正在尝试模拟一个迭代器,为此您必须模拟2个方法hasNext()和next(),如果hasNext()返回true,则始终会有一个无限循环,如果从头开始返回false,则next()不会返回任何东西。
我的问题是:有没有一种方法可以像在嘲讽中那样用ockock一个个地模拟单个呼叫?我在文档中找不到任何内容。
p3q*_*uod 32
returnsMany 指定一些一个一个使用的值,即第一个匹配的调用返回第一个元素,第二个?返回?第二个元素:
every { mock1.call(5) } returnsMany listOf(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
您可以使用 andThen 构造实现相同的效果:
every { mock1.call(5) } returns 1 andThen 2 andThen 3
Run Code Online (Sandbox Code Playgroud)
现在我有一个类似的用例,但对我来说answers这是合适的解决方案,因为我已经有一个Iterator就位的解决方案(返回的迭代器实际上是 的自定义扩展Iterator):
every { mock.bogusIterator() /* : CustomIterator */ } answers {
val testIterator = testList.iterator() // just an Iterator
every { hasNext() } answers { testIterator.hasNext() }
every { next() } answers { testIterator.next() }
}
Run Code Online (Sandbox Code Playgroud)
其中testList包含一些用于测试的预定义值。
returns始终返回当时赋予函数的值。因此 usingevery { hasNext() } returns whatever将始终返回模拟声明时的值whatever,无论whatever是否可变。另一方面,answer您始终可以获得调用函数时返回的当前值。万一有人对此感到困惑;-)也许我的进一步解释也有点令人困惑:-)
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |