Mockito: имитация HTTP-вызова с помощью OK HTTP Client

#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 /) вместо этого.