Как я могу макет сложного (URL) API с Retrofit - PullRequest
0 голосов
/ 13 октября 2018

Мне нужно сделать что-то, как описывает этот сайт: https://blog.davidmedenjak.com/android/2016/11/22/mocking-api-calls.html 1

Мне нужно смоделировать мой API на определенныхиспользовать некоторый файл json, реализуя мой собственный перехватчик OkHttp. Я могу сделать это с помощью простого URL, но как я могу это сделать, если URL-адрес более сложный, например:

/ hello /world / {myName} / {mySurname}

?

В моем пользовательском перехватчике URL-адрес уже «скомпилирован», но мне нужно прочитать мои файлы json на основе их имени файла,поэтому мне нужно {myName} и {mySurname} в качестве строк. Я думаю, что я должен прочитать аннотации URL, но я не могу найти никакого примера этого.

Мой исходный код похож на приведенный выше веб-сайт, яу меня есть мой API.kt:

internal interface API {
    @GET("hello/world/{myName}/{mySurname}")
    fun hello(
        @Path(value = "myName") name: String,
        @Path(value = "mySurname") surname: String
    ): Observable...
}

и мой ServiceFactory.kt, где я реализую свой собственный перехватчик:

val httpClient = OkHttpClient.Builder()
httpClient.interceptors().add(Interceptor { chain ->
    // here I have my request and response
    // here the request URL is already compiled, for example: /hello/world/steve/jobs
})

Так что я думаю, что я должен прочитать аннотации URL, реализующие мои собственные ConverterFactory :

retrofit
    .client(httpClient.build())
    .addConverterFactory(MoshiConverterFactory.create())
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    .build()
    .create<API>(API::class.java)

Любая помощь приветствуется! Спасибо, ребята!

1 Ответ

0 голосов
/ 14 октября 2018

Если бы вы могли дать больше контекста о том, что именно вы пытаетесь сделать, это было бы полезно.Из того, что я понимаю, вам не понадобится специальный перехватчик только для тестирования.Вы можете использовать MockWebServer, ставить запросы в очередь и проверять ответы по порядку.MockWebServer имеет метод takeRequest(), с помощью которого вы можете указать заголовки, URL, параметры запроса и т. Д.

Документацию можно найти здесь: https://github.com/square/okhttp/tree/master/mockwebserver

...