我需要模拟对某个类的调用,并使其花费一些时间。
当前代码使用以下代码:
every { useCase.execute(any()) } answers {
AnswersWithDelay(50000, DoesNothing.doesNothing())
}
现在,我正在更改
execute()
以返回Notification
类的对象。val notif = Notification(...)
但我不知道如何更改此模拟。
val answer: org.mockito.stubbing.Answer<Notification> = AdditionalAnswers.answer { invocation: InvocationOnMock -> notif }
val delayedAnswer = AdditionalAnswers.answersWithDelay(50000, { invocation: InvocationOnMock -> answer } )
我找不到如何使
answers { ... }
可编译的方法。有小费吗? 最佳答案
Mockito和MockK API有点混乱,因为它们共享术语,但不兼容。 MockK的io.mockk.Answer
与Mockito的org.mockito.stubbing.Answer
不兼容,从那里开始,所有其他util类都不匹配。
因此,尽管它最初可能使用DoesNothing.doesNothing()
,但由于返回类型为Unit
/ void
,所以使用返回类型必须使用MockK的惯用方式创建该模拟。
所以我诉诸:
val answerF = FunctionAnswer { Thread.sleep(50000); notif }
every { useCase.execute(any()) } .answers(answerF)