MockK 中的 verifySequence 和 verifyOrder 有什么区别?
What's the difference between `verifySequence` and `verifyOrder` in MockK?
在 MockK 库的指南中,示例并没有帮我解决这个问题。以下是文档中的示例:
class MockedClass {
fun sum(a: Int, b: Int) = a + b
}
val obj = mockk<MockedClass>()
val slot = slot<Int>()
every {
obj.sum(any(), capture(slot))
} answers {
1 + firstArg<Int>() + slot.captured
}
obj.sum(1, 2) // returns 4
obj.sum(1, 3) // returns 5
obj.sum(2, 2) // returns 5
verifyAll {
obj.sum(1, 3)
obj.sum(1, 2)
obj.sum(2, 2)
}
verifySequence {
obj.sum(1, 2)
obj.sum(1, 3)
obj.sum(2, 2)
}
verifyOrder {
obj.sum(1, 2)
obj.sum(2, 2)
}
val obj2 = mockk<MockedClass>()
val obj3 = mockk<MockedClass>()
verify {
listOf(obj2, obj3) wasNot Called
}
方法 verifySequence
检查是否只发生了指定的调用,并且调用顺序必须相同。另一方面,如果您像示例 (obj.sum(1, 3)
) 中那样省略一些调用,则方法 verifyOrder
也适用。以下将失败,因为您不能遗漏 verifySequence
:
的呼叫
verifySequence {
obj.sum(1, 2)
obj.sum(2, 2)
}
在 MockK 库的指南中,示例并没有帮我解决这个问题。以下是文档中的示例:
class MockedClass {
fun sum(a: Int, b: Int) = a + b
}
val obj = mockk<MockedClass>()
val slot = slot<Int>()
every {
obj.sum(any(), capture(slot))
} answers {
1 + firstArg<Int>() + slot.captured
}
obj.sum(1, 2) // returns 4
obj.sum(1, 3) // returns 5
obj.sum(2, 2) // returns 5
verifyAll {
obj.sum(1, 3)
obj.sum(1, 2)
obj.sum(2, 2)
}
verifySequence {
obj.sum(1, 2)
obj.sum(1, 3)
obj.sum(2, 2)
}
verifyOrder {
obj.sum(1, 2)
obj.sum(2, 2)
}
val obj2 = mockk<MockedClass>()
val obj3 = mockk<MockedClass>()
verify {
listOf(obj2, obj3) wasNot Called
}
方法 verifySequence
检查是否只发生了指定的调用,并且调用顺序必须相同。另一方面,如果您像示例 (obj.sum(1, 3)
) 中那样省略一些调用,则方法 verifyOrder
也适用。以下将失败,因为您不能遗漏 verifySequence
:
verifySequence {
obj.sum(1, 2)
obj.sum(2, 2)
}