IdlingResource入门:espresso-samples用自定义空闲资源精确等待指定时长

发布时间:2026/10/21 16:09:49

IdlingResource入门:espresso-samples用自定义空闲资源精确等待指定时长 IdlingResource入门espresso-samples用自定义空闲资源精确等待指定时长【免费下载链接】espresso-samplesA collection of samples demonstrating different Espresso techniques.项目地址: https://gitcode.com/gh_mirrors/esp/espresso-samplesEspresso 是 Android UI 测试的主流框架而 IdlingResource空闲资源是它同步等待异步操作的核心机制。本文基于开源示例集 espresso-samples 的idling-resource-elapsed-time示例手把手教你用自定义空闲资源精确等待指定时长告别测试中脆弱的Thread.sleep()。为什么需要自定义 IdlingResourceEspresso 执行perform(click())等动作后会持续轮询直到界面空闲才继续下一步。但对于应用内部的耗时任务倒计时、网络请求、后台服务Espresso 感知不到它们的进度测试就会因为时机不对而偶发失败。解决办法实现一个IdlingResource向 Espresso 报告现在是否空闲isIdleNow()返回true表示空闲false表示还在忙Espresso 会暂停操作并轮询registerIdleTransitionCallback()当状态从忙转为闲时主动回调onTransitionToIdle()让 Espresso 立刻恢复执行。⚠️ 注意不要像Thread.sleep()那样阻塞线程isIdleNow()必须快速返回。用 ElapsedTimeIdlingResource 等待指定时长idling-resource-elapsed-time示例的思路非常直观记录一个起始时间戳当经过的时间达到预设的waitingTime时就宣告空闲。核心实现在 ElapsedTimeIdlingResource.ktclass ElapsedTimeIdlingResource(private val waitingTime: Long) : IdlingResource { private val startTime: Long System.currentTimeMillis() private var resourceCallback: IdlingResource.ResourceCallback? null override fun isIdleNow(): Boolean { val idle System.currentTimeMillis() - startTime waitingTime if (idle) resourceCallback?.onTransitionToIdle() return idle } override fun registerIdleTransitionCallback(cb: IdlingResource.ResourceCallback) { resourceCallback cb } }这个示例配套了一个简单的计时界面点 Start 开始计时点 Stop 显示结果——如果等待满一分钟则显示 Yes, you waited for a minute!否则显示 Patience, my friend见 MainActivity.kt。注册空闲资源并同步等待的完整流程测试代码位于 MainActivityTest.kt流程分四步启动计时onView(withId(R.id.toggle_button)).perform(click())点击 Start 按钮防止超时把总策略和空闲资源超时设为等待时长的 2 倍——IdlingPolicies.setMasterPolicyTimeout(waitingTime * 2, TimeUnit.MILLISECONDS) IdlingPolicies.setIdlingResourceTimeout(waitingTime * 2, TimeUnit.MILLISECONDS)注册等待注册ElapsedTimeIdlingResource(waitingTime)。此后 Espresso 的每一步操作都会先等它变空闲也就实现了精确等待指定时长验证并清理点击 Stop断言结果文案最后务必IdlingRegistry.getInstance().unregister(...)注销避免污染下一个用例。测试用例覆盖两种场景等待 8 秒断言失败文案等待 75 秒断言成功文案直观验证了等待时长是否生效。项目中其他 IdlingResource 示例espresso-samples还有几个同类示例可按需对照学习目录场景idling-resource-okhttp/等待 OkHttp/Retrofit 网络请求空闲idling-registry-okhttp/同上按 debug/release 拆分实现idling-resource-intent-service/等待后台 IntentService 执行完毕idling-resource-dialog-fragment/练习题等待加载对话框消失小结自定义IdlingResource是让 Espresso 精确同步异步逻辑的标准做法isIdleNow()要快速返回用回调通知状态转换注册前先调整IdlingPolicies超时用完后及时注销想精确等待 N 秒照抄 ElapsedTimeIdlingResource.kt 即可不到 30 行代码搞定。【免费下载链接】espresso-samplesA collection of samples demonstrating different Espresso techniques.项目地址: https://gitcode.com/gh_mirrors/esp/espresso-samples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/21 1:08:37

多导睡眠五大PSG数据集统一格式化处理|SHHS

完整五个数据集处理请见: https://blog.csdn.net/m0_70335361/article/details/151406787?fromshareblogdetail&sharetypeblogdetail&sharerId151406787&sharereferPC&sharesourcem0_70335361&sharefromfrom_linkhttps://blog.csdn.net/m0_70…

2026/10/21 16:05:34

ZigBee智能路灯控制系统:从方案选型到联网联调的全栈实践

1. 方案选型:为什么是ZigBee扛起路灯组网这面旗 做路灯控制系统,第一关不是写代码,而是选通信方式。我在做这个项目之前,其实先试过WiFi方案和蓝牙Mesh方案,最后才定下来用ZigBee。先说结论:ZigBee不是各方…

2026/10/21 16:05:34

51单片机胎压监测系统实战:从Proteus仿真到代码避坑

简介:这份资源面向电子信息、自动化及汽车电子方向的在校学生与单片机初学者,提供一套基于51单片机的汽车胎压监测报警系统完整设计资料,帮助读者理解从传感器采集到声光报警的整条实现链路。压缩包为zip格式,约9.87MB&#xff0c…

2026/10/21 16:05:34

Docker镜像构建实战:多阶段瘦身与buildx多架构交叉编译

Docker 玩到一定阶段,大家几乎都会遇到两个绕不开的事儿:一个是把镜像做干净、做稳定,另一个是让镜像在不同 CPU 架构上都能跑。前者是基本功,后者尤其在 ARM 设备、树莓派、异构服务器混布的场合里特别刚需。这次就从一个实际项目…

2026/10/21 16:05:34

C语言中函数的声明、定义及使用的入门教程

前言 初学 C 语言时,「声明」「定义」「调用」这三个词经常被混着用。有人把函数头加一个分号就叫定义,有人把头文件里的原型当成实现,还有人写了函数却忘了在调用处之前声明,靠编译器「猜」出一个返回 int 的版本。这些混淆在单个…

2026/10/21 16:05:34

知识工作插件:面向认知任务的轻量级自动化单元

1. 项目概述:这不是插件,而是一套知识工作者的“思维外挂”系统“knowledge-work-plugins”这个标题乍看像某个开源仓库名,但拆开来看——knowledge(知识)、work(工作)、plugins(插件…

2026/10/21 16:00:33

文件上传绕过实战:从日志包含到RCE的完整攻击链分析

1. 从"能上传"到"能利用":这道题真正考的是什么先说结论:这道CTF题作业2最坑人的地方,恰恰在于它看起来"太简单了"。很多人一看到文件上传,脑子里立刻蹦出三个字——"马"呢?然…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/21 0:00:35

交通流仿真实战:IDM跟驰与MOBIL换道模型参数调优与避坑指南

简介:这份资源是面向交通工程学习者与Python开发者的微观交通流仿真项目,核心实现智能驾驶模型(IDM)下的车辆跟驰与换道行为,可用于理解速度、密度与流量之间的动态关系,适合具备Python基础、希望深入交通模…

2026/10/21 0:00:35

揭穿智能体表面顺从:用追踪代码重建任务执行确定性

1. 表面顺从不是智能体的“礼貌”,而是任务执行链路上的隐性断点最近在调试一个跨平台长周期任务调度系统时,我反复遇到一种令人困惑的现象:智能体在用户指令发出后,几乎秒级响应“已收到”“正在处理”“请稍候”,UI上…

2026/10/21 0:00:35

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑