PS:代码将在Koltin中
例如,我有一个服务类,它执行某些操作并注入其他服务。
class MyService(
private val someOtherService: OtherService
) {
fun doSomething() {
someOtherService.someMethod("foo")
someOtherService.someMethod("bar")
someOtherService.someMethod("baz")
}
}
这是我的模拟MyService的MyService类的测试:
internal class MyServiceTest {
@MockkBean(relaxed = true)
private lateinit var someOtherService: OtherService
@Test
fun `my test description`() {
every { someOtherService.someMethod(any()) } just Runs
verify(exactly = 1) {
someOtherService.someMethod(
match {
it shouldBe "bar"
true
}
)
}
}
因此,将期望使用"bar"
参数,但将改为"foo"
参数,并且测试将失败。
原因:someOtherService.someMethod("foo")
将在someOtherService.someMethod("bar")
之前被呼叫。
但是,我想验证每个方法都调用一次。我该怎么做?
答案 0 :(得分:0)
您可以:
verifySequence {
someOtherService.someMethod("foo")
someOtherService.someMethod("bar")
someOtherService.someMethod("baz")
}
它验证提到的模拟仅执行了指定的调用顺序。
如果没有,则可以使用列表捕获参数并稍后验证值。