Я пытаюсь написать какой-нибудь тест, включающий 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
?