【问题标题】:Local unit test while using Call<T> object in Retrofit在 Retrofit 中使用 Call<T> 对象时进行本地单元测试
【发布时间】:2019-01-05 11:46:30
【问题描述】:

我有以下 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&lt;T&gt; 对象而不是Observable。如何替换测试方法中的以下部分?

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

完整的示例代码可以在:https://github.com/Ali-Rezaei/TMDb-Paging找到

【问题讨论】:

    标签: android unit-testing kotlin


    【解决方案1】:

    您可以为此使用retrofit-mock

    val mockCall = Calls.response(Response.success(myTestData))
    `when`(api.myFunction()).thenReturn(mockCall)
    

    【讨论】:

    猜你喜欢
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多