Mockk: Как издеваться над возвратом после задержки? - PullRequest
0 голосов
/ 14 апреля 2020

Мне нужно смоделировать вызов некоторого класса и заставить его занять некоторое время.

Текущий код использует это:

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 { ... } компилируется. Любые советы?

1 Ответ

0 голосов
/ 14 апреля 2020

API-интерфейсы Mockito и MockK немного сбивают с толку, поскольку они имеют общую терминологию, но не совместимы. io.mockk.Answer в MockK не совместим с org.mockito.stubbing.Answer в Mockito, и оттуда все другие классы утилит также не совпадают.

Поэтому изначально он мог использовать DoesNothing.doesNothing(), поскольку возвращаемый тип был Unit / void, с возвращаемым типом макет должен быть создан с помощью идиоматического способа MockK c.

Поэтому я прибег к:

    val answerF = FunctionAnswer { Thread.sleep(50000); notif }
    every { useCase.execute(any()) } .answers(answerF)
...