Как запустить лямбда-функцию, переданную по методу? - PullRequest
1 голос
/ 08 апреля 2020

Интересно, что можно запустить лямбда-функцию, переданную в качестве параметра для фиктивной функции. И запускайте его всякий раз, когда вызывается смоделированный метод.

Я использую Mockk и представляю, что код выглядит примерно так:

class DataManager {
   fun submit(lambda: (Int) => Unit) { ... }
}

...

val mock = mockk<DataManager>()

every { mock.submit(lambda = any()) }.run { lambda(5) }

В моей реальной реализации менеджер данных вызывает сервер и запускает лямбду как обратный вызов, когда получает успешный ответ. Лямбда - это частный метод тестируемого класса.

1 Ответ

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

Вам нужно использовать Capture вместо Any.

val dataManager: DataManager = mockk()

every { dataManager.submit(captureLambda()) } answers { lambda<(Int) -> Unit>().invoke(5) }

dataManager.submit { i -> println(i) }

Кроме того, объявление вашего типа функции недопустимо.

У вас есть (Int) => Unit, когда оно должно быть (Int) -> Unit.

...