Как смоделировать и проверить лямбда-выражение в Kotlin? - PullRequest
0 голосов
/ 07 декабря 2018

В Kotlin (и Java 8) мы можем использовать лямбда-выражение для удаления стандартного интерфейса обратного вызова.Например,

data class Profile(val name: String)

interface ProfileCallback {
  fun onSuccess(profile: Profile)
}

class ProfileRepository(val callback: ProfileCallback) {

  fun getProfile() {
    // do calculation
    callback.onSuccess(Profile("name"))
  }
}

Мы можем изменить remove ProfileCallback и изменить его на Lambda Котлина:

class ProfileRepository(val callback: (Profile) -> Unit) {

  fun getProfile() {
    // do calculation
    callback(Profile("name"))
  }
}

Это прекрасно работает, но я не уверен, как издеваться, а затемпроверьте эту функцию.Я пытался использовать Mockito, как это

@Mock
lateinit var profileCallback: (Profile) -> Unit

@Test
fun test() {
    // this wouldn't work
    Mockito.verify(profileCallback).invoke(any())   
}

, но он выдает исключение:

org.mockito.exceptions.base.MockitoException: ClassCastException произошел во время создания mockito mock: classиздеваться: 'kotlin.jvm.functions.Function1', загруженный загрузчиком классов:'sun.misc.Launcher$AppClassLoader@7852e922'

Как смоделировать и проверить лямбда-выражение в Kotlin?Это вообще возможно?

1 Ответ

0 голосов
/ 14 декабря 2018

Вот пример того, как вы можете добиться этого, используя mockito-kotlin:

Данный класс репозитория

class ProfileRepository(val callback: (Int) -> Unit) {

    fun getProfile() {
        // do calculation
        callback(1)
    }
}

Используя mockito-kotlin lib - вы можете написать тестовые фиктивные лямбды, например так:

@Test
fun test() {
    val callbackMock: (Int) -> Unit = mock()
    val profileRepository = ProfileRepository(callbackMock)

    profileRepository.getProfile()

    argumentCaptor<Int>().apply {
        verify(callbackMock, times(1)).invoke(capture())
        assertEquals(1, firstValue)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...