代码之家  ›  专栏  ›  技术社区  ›  Ali

在改装中使用call<t>对象时进行本地单元测试

  •  0
  • Ali  · 技术社区  · 7 年前

    我有以下单元测试:

    @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 回复  |  直到 7 年前
        1
  •  0
  •   RussHWolf    7 年前

    你可以使用 retrofit-mock 为此。

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