Mockk: выполнение кода обратного вызова в реальном объекте, вызывающем службу mockk - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь добиться чего-то похожего на это: Как вызвать лямбда-вызов с помощью mockk

Я передаю поддельную услугу своему реальному объекту. Как я могу получить обратный вызов myService.get? Этот код никогда не вызывается, и мой тест останавливается на этом запросе.

Вот пример кода:

class MyObject(private val myService: MyService){
    fun getSomeStuff() {
        myService.get(object: MyService.Callback<MyServiceResponse>{
            override fun onResponse(response: MyServiceResponse?) {
                // check response and do some stuff
                // I want to continue my tests here, but this gets never called
            }
        })
    }

Как создать тест, который продолжается внутри обратного вызова?

Вот что я искал ie в моем тесте:

@Test
fun `get some stuff - success`() {
    val myService = mockk<MyService>() {
        every { get(any()) } answers {
            firstArg<() -> MyService.Callback<MyServiceResponse>>().invoke()
        }
    }

    val myObject = MyObject(myService)

    myObject.getSomeStuff()
}

1 Ответ

1 голос
/ 23 марта 2020

Вы должны быть в состоянии вызвать onResponse(), используя:

every { get(any()) } 
answers {
  firstArg<MyService.Callback<MyServiceResponse>>().onResponse(aMyServiceResponse)
}

Кстати, поскольку вы используете обратный вызов, я предполагаю, что реализация асинхронная, поэтому вам, вероятно, потребуется используйте вариант coEvery / coAnswer .

HTH

...