gpt4 book ai didi

android - uiController.loopMainThreadForAtLeast 与 Thread.sleep 有何不同?

转载 作者:行者123 更新时间:2023-11-29 23:07:19 25 4
gpt4 key购买 nike

this video from Google I/O 2016 , Wojtek Kaliciński 建议在 Espresso 测试中使用 uiController.loopMainThreadForAtLeast 而不是 Thread.sleep。诚然,上下文是围绕 Idling Resources 展开的,但两者之间有什么区别,为什么一个比另一个更好?

最佳答案

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

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 指定何时app is not idle 不是一个好的解决方案。你不应该改变用于测试您的应用程序的生产代码和空闲资源检查应用程序是否以 5 秒的间隔空闲,这将导致大量开销你的测试。假设您有 100 个测试用例,您将在其中体验这个间隔,你将经历的开销将是巨大的

  3. 单独使用 Thread.sleep(x) 显然不是一个好主意。身为你的无论互联网速度如何,测试都需要稳定连接,电话等你不应该等待固定数量的时间。你不知道你需要等待多少时间从服务器请求一些东西,所以 x 你决定要么太太大或太小。

最好的解决方案是检查断言/操作中的目标 View 是否存在,如果不存在,则在 X 秒后再次检查目标 View (其中 X 是一个很小的数字,如 200 毫秒)。此外,使用 Thread.sleep() 对我来说比使用更好 uiController.loopMainThreadForAtLeast() 当我的应用程序正在显示动画时(即使动画已从 testOptions 和电话设置中关闭)

关于android - uiController.loopMainThreadForAtLeast 与 Thread.sleep 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56396876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com