我需要模拟对某个类的调用,并使其花费一些时间。

当前代码使用以下代码:

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)

10-04 14:10