Дразнить родовой метод в Котлине - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь написать какой-нибудь тест, включающий JDKHttpClient из ScribeJava , поскольку я хочу издеваться над сервисом OAuth, который я использую для автоматического тестирования моего API.

Работа с методами execute работает нормально:

val mockClient : HttpClient = mock(JDKHttpClient::class.java)
val responseBody = "{\"access_token\": \"gotit\", \"token_type\": \"type\", \"expires_in\": 3600}"
whenever(mockClient.execute(anyString(), anyMap(), eq(Verb.GET), anyString(), any(ByteArray::class.java)))
   .thenReturn(Response(302, "ciao", emptyMap(), responseBody))

При использовании только методов execute я получаю NPE при попытке получить маркер доступа, потому что клиент пытается вызвать вариант executeAsync.Моя проблема в том, что я не знаю, как издеваться над этими методами.Очевидная вещь, которую нужно сделать, заключается в следующем:

whenever(mockClient.executeAsync(anyString(), anyMap<String,String>(), eq(Verb.GET), anyString(),
    any(String::class.java),
    any(OAuthAsyncRequestCallback::class.java), 
    any(OAuthRequest.ResponseConverter::class.java))
).thenReturn(JDKHttpFuture(Response(302, "ciao", emptyMap(), responseBody)))

Проблема в том, что компилятор Kotlin не может определить тип T для подписи этих методов:

public <T> Future<T> executeAsync(String userAgent, Map<String, String> headers, Verb httpVerb, String completeUrl,
    byte[] bodyContents, 
    OAuthAsyncRequestCallback<T> callback, 
    OAuthRequest.ResponseConverter<T> converter) 

Как можноЯ говорю комплине Kotlin правильный тип T?Существует ли какая-либо синтаксическая вариация:

any(OAuthRequest.ResponseConverter::class.java)

, которая позволяет мне явно указать тип T, связанный с ResponseConverter?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...