Mockito + Kotlin: как смоделировать метод, который возвращает T при обратном вызове - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь создать фиктивный метод для запуска модульного теста для функции ниже:

class SomeClass{
    fun <T> someMethod(str: String, action: (String) -> T): T {
        // do something
        return action(str);
    }
}

Мой фиктивный метод:

val mock = Mockito.mock(SomeClass::class.java)
`when`(mock.someMethod<Unit>(anyString(), any())).then { invocation ->
     @Suppress("UNCHECKED_CAST")
     (invocation.arguments[1] as (String) -> Unit).invoke("Some String...")
 }

, но я сталкиваюсь со следующей проблемой, когда он не работает и выбросить исключение: java .lang.IllegalStateException в строке "when (mock.someMethod (anyString (), any ())). затем {invocation ->"

у вас есть идеи почини это?

Спасибо за помощь

1 Ответ

0 голосов
/ 05 марта 2020

Прежде всего: использование Mockito непосредственно из Kotlin раздражает, например, потому что when является ключевым словом в языке, и вы должны избегать его с помощью обратных галочек. Существует библиотека-обертка, которая устраняет большинство проблем: https://github.com/nhaarman/mockito-kotlin. В противном случае mockk также является хорошим альтернативным фреймворком.

Относительно вашей проблемы: Вероятно, это связано с тем, что Mockito и Kotlin не слишком хорошо работают вместе; это работает для меня, используя библиотеку, упомянутую выше. Можете ли вы поделиться дополнительной информацией об сообщении об ошибке?

...