首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >uiController.loopMainThreadForAtLeast和Thread.sleep有什么不同?

uiController.loopMainThreadForAtLeast和Thread.sleep有什么不同?
EN

Stack Overflow用户
提问于 2019-05-31 06:23:31
回答 1查看 751关注 0票数 1

这段视频来自谷歌2016年I/O中,Wojtekński建议在Espresso测试中使用uiController.loopMainThreadForAtLeast而不是Thread.sleep。当然,上下文是围绕空闲资源的,但是两者之间有什么区别,为什么其中一个比另一个好呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-06 23:27:42

Espresso使用队列来检查应用程序是否空闲。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Thread.sleep(x) = //Waits x 
uiController.loopMainThreadForAtLeast(x) // Waits x + more if app is still not idle

现在,这两种方法都是非常糟糕的,这将导致生产代码中的一些问题。

  1. 如果使用AsyncTasks,Espresso可以检测应用程序是否空闲,但在某些情况下它不能。因此,即使应用程序不空闲,uiController.loopMainThreadForAtLeast(x)也会被跳过。
  2. 在生产代码中使用IdlingResources来指定什么时候应用程序不是空闲的并不是一个好的解决方案。您不应该更改生产代码来测试您的应用程序和空闲资源,检查应用程序是否空闲,每隔5秒钟就会造成大量的测试开销。假设您有100个测试用例,您将在其中体验到这个间隔,那么您将经历的开销将是巨大的。
  3. 使用Thread.sleep(x)本身显然是个坏主意。由于您的测试需要是稳定的,无论互联网连接的速度,电话等,你不应该等待固定的时间。当您从服务器请求某件东西时,您不知道需要等待多长时间,所以您决定的x要么太大,要么太小。

最好的解决方案是检查断言/操作中的目标视图是否存在,如果没有,则在X秒后再次检查目标视图(其中X是一个像200 millis这样的小数字)。此外,在我的应用程序显示动画时,使用Thread.sleep()比使用uiController.loopMainThreadForAtLeast()更有效(即使在testOptions和电话设置关闭动画时)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56396876

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文