Локальный юнит-тест при использовании объекта Call <T>в Retrofit - PullRequest
0 голосов
/ 05 января 2019

У меня есть следующий unitTest:

@Test
    fun loadMovieTrailer() {
        val video = Video("id", "name", "site",
                "videoId", 20, "type")

        val observableResponse =
                Observable.just(MovieApi.VideoWrapper(Lists.newArrayList(video)))
        `when`(movieApi.trailers(anyString())).thenReturn(observableResponse)


        with(viewModel) {
            assertFalse(isTrailersVisible.get())

            showTrailers(movie)

            assertTrue(isTrailersVisible.get())
            assertFalse(trailers.isEmpty())
            assertTrue(trailers.size == 1)
        }
    }

И это movieApi.trailers модифицированный метод API:

@GET("3/movie/{movieId}/videos")
    fun trailers(@Path("movieId") movieId: String): Observable<VideoWrapper>

У меня есть другой метод в MovieApi, для которого я хочу написать тест:

@GET("3/discover/movie?language=en&sort_by=popularity.desc")
    fun popularMovies(@Query("page") page: Int): Call<MovieWrapper>

Как вы видите, он возвращает Call<T> объект вместо Observable. Как можно заменить следующую часть в методе испытаний?

Observable.just(MovieApi.VideoWrapper(Lists.newArrayList(video)))
            `when`(movieApi.trailers(anyString())).thenReturn(observableResponse)

Полный пример кода можно найти по адресу: https://github.com/Ali-Rezaei/TMDb-Paging

1 Ответ

0 голосов
/ 06 января 2019

Для этого вы можете использовать retrofit-mock.

val mockCall = Calls.response(Response.success(myTestData))
`when`(api.myFunction()).thenReturn(mockCall)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...