#kotlin #mockito
#kotlin #mockito
Вопрос:
Я использую OK HTTP-клиент Kotlin для выполнения HTTP-вызовов из моего приложения:
val httpCall = okHttpClient.newCall(myRequest)
val response = httpCall.execute()
Клиент создается как компонент:
@Bean(name = ["okHttpClient"])
fun produceOkHttpClient(): OkHttpClient? {
return OkHttpClient()
}
Как мне высмеять это в моем модульном тестировании с использованием Mockito?
У меня настроен макет компонента:
@Bean
fun okHttpClient(): OkHttpClient? {
return mock(OkHttpClient::class.java)
}
… и я попробовал следующее в модульном тестировании:
val call : Call = mock(Call::class.java)
`when`(okHttpClient?.newCall(any(Request::class.java))).thenReturn(call)
… но я получаю это (сбивающее меня с толку) сообщение, когда пытаюсь запустить тест:
java.lang.IllegalStateException: any(Request::class.java) must not be null
Комментарии:
1.
any(Request::class.java)
возвращаетnull
и всегда будет возвращатьnull
, иOkHttpClient
это не интерфейс, а конкретный класс, который имеет фактическое поведение, которое не принимаетnull
значения в качестве аргументов. Так что в основном не издевайтесь над ним, а скорее переносите его поведение в интерфейс / конкретную реализацию и издевайтесь над этим.
Ответ №1:
Я перешел к использованию Mockk (https://mockk.io /) вместо этого.