android - 浓缩咖啡,如何滚动到回收站视图的底部和空闲状态
问题描述
我正在学习使用 Espresso 进行 UI 测试。我想测试将回收器视图滚动到底部,然后从视图模型加载下一页并将其传递给回收器视图。
我的片段中有以下 onScrollListener :
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()
时效果很好。
我的问题是:如何使用 Espresso(或者可能是不同的 API,如果你比 Espresso 更了解)将回收器视图滚动到这个状态:
isRecyclerViewBottom = !recyclerView.canScrollVertically(1) && newState == RecyclerView.SCROLL_STATE_IDLE
,所以我的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、Mockk、Espresso。我在这里模拟了存储库类,它被传递给 ViewModelFactory 的构造函数,它被传递给 ApiFragment 的构造函数。
来自 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)
这不是我的第一个测试功能。其他一切都很好。我只是不知道如何让 Espresso 进入回收站视图的底部并“拉起”它的底部边缘来调用downloadNextPage()
解决方案
好的。我刚刚找到了一个解决方案。我recyclerView.perform(swipeDown())
改为recyclerView.perform(swipeUp())
.
推荐阅读
- android - React-native run-android 在插入的 android 4.1.2 手机上不起作用
- python - OCRmyPDF 错误:无法获取 http://security.ubuntu.com/
- go - Gin Go 框架中的测试
- c# - 基于从 MySQL 数据库更改 ID 的行颜色
- sql - 如何缩短 SQL 函数
- flutter - 在构建期间从父类 setState() 或 markNeedsBuild() 设置状态时
- android - 启动活动并保持设备唤醒
- node.js - {select: false} 在 mongoose 查询上的工作方式不同
- java - java - 如何将整数输入与java中的字符串相乘并将其打印在一行上?
- java - 两个将 flatMap 设置为整数的流