Espresso,如何滚动到底部和回收器视图的IDLE状态



我正在学习Espresso的UI测试。我想测试循环器视图到底滚动,然后从视图模型加载下一页,并将其传递给循环器视图。

我的片段中有以下关于ScrollListener的内容:

private fun setupOnScrollListener() {
recyclerViewApi.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
val isRecyclerViewBottom = !recyclerView.canScrollVertically(1) &&
newState == RecyclerView.SCROLL_STATE_IDLE
if (isRecyclerViewBottom) {
downloadNextPage()
}
}
})
}
private fun downloadNextPage() {
showProgressBar(true)
viewModel.getNextMovies()
}

当我用Log.d()手动测试它时,它工作得很好。

我的问题是:如何使用浓缩咖啡(或者可能不同的API,如果你比浓缩咖啡更了解的话(将回收商视图滚动到此状态:CCD_ 2,所以我的downloadNextPage()将被调用,测试函数将提取更多数据。

我的测试功能:

@Test
fun scrollToBottom_isNextPageLoaded(){
every { repository.getApiMovies(any(), any()) } returns
Flowable.just(Resource.success(moviesList1_5)) andThen
Flowable.just(Resource.success(moviesList1_10))
val scenario = launchFragmentInContainer<ApiFragment>(factory = fragmentsFactory)
//first 5 items are in view, so I go to the last item (index 4)
recyclerView.perform(scrollToPosition<ViewHolder>(4))
recyclerView.perform(swipeDown())
//Below doesn't make any difference
Thread.sleep(1000L) 
verify(exactly = 2) { repo.getApiMovies(any(), any()) }
}

我用Robolectric,Mock,Espresso。我在这里模拟了repository类,它被传递给ViewModelFactory的构造函数,它被传给ApiFFragment的构造函数。

JUnit的消息:

java.lang.AssertionError: Verification failed: call 1 of 1: ApiRepository(repo#4).getApiMovies(any(), any())). 
One matching call found, but needs at least 2 and at most 2 calls
Call: ApiRepository(repo#4).getApiMovies(Top Rated, 1)

这不是我的第一个测试函数。其他一切都很好。我只是不知道如何制作浓缩咖啡,让它进入回收商视图的底部,并"拉起"它的底部边缘,调用downloadNextPage()

好的。我刚刚找到了一个解决方案。我把recyclerView.perform(swipeDown())改成了recyclerView.perform(swipeUp())

最新更新