uiController.loopMainThreadForAtLeast 与 Thread.sleep 有何不同?
How is uiController.loopMainThreadForAtLeast different from Thread.sleep?
在 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
现在这两种方法都非常糟糕,会导致生产代码出现一些问题。
如果您使用 AsyncTasks,Espresso 可以检测应用程序是否空闲
但在某些情况下它不能。因此,即使您的应用没有闲置,
uiController.loopMainThreadForAtLeast(x)
将被跳过。
在生产代码中使用 IdlingResources
指定何时
app is not idle 不是一个好的解决方案。你不应该改变
用于测试您的应用程序的生产代码和空闲资源检查应用程序是否
以 5 秒的间隔空闲,这将导致大量开销
你的测试。假设您有 100 个测试用例,您将在其中体验
这个间隔,你将经历的开销将是巨大的
单独使用Thread.sleep(x)
显然不是一个好主意。身为你的
无论互联网速度如何,测试都需要稳定
连接,phone 等你不应该等待固定数量的
时间。你不知道你需要等待多少时间
从服务器请求一些东西,所以 x
你决定也可以
太大或太小。
最好的解决方案是检查 assertion/action 中的目标视图是否存在,如果不存在,请在 X 秒后再次检查目标视图(其中 X 是一个很小的数字,如 200 毫秒)。使用 Thread.sleep()
对我来说也比使用更好
uiController.loopMainThreadForAtLeast() 当我的应用显示动画时(即使动画已从 testOptions 和 phone 设置中关闭)
在 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
现在这两种方法都非常糟糕,会导致生产代码出现一些问题。
如果您使用 AsyncTasks,Espresso 可以检测应用程序是否空闲 但在某些情况下它不能。因此,即使您的应用没有闲置,
uiController.loopMainThreadForAtLeast(x)
将被跳过。在生产代码中使用
IdlingResources
指定何时 app is not idle 不是一个好的解决方案。你不应该改变 用于测试您的应用程序的生产代码和空闲资源检查应用程序是否 以 5 秒的间隔空闲,这将导致大量开销 你的测试。假设您有 100 个测试用例,您将在其中体验 这个间隔,你将经历的开销将是巨大的单独使用
Thread.sleep(x)
显然不是一个好主意。身为你的 无论互联网速度如何,测试都需要稳定 连接,phone 等你不应该等待固定数量的 时间。你不知道你需要等待多少时间 从服务器请求一些东西,所以x
你决定也可以 太大或太小。
最好的解决方案是检查 assertion/action 中的目标视图是否存在,如果不存在,请在 X 秒后再次检查目标视图(其中 X 是一个很小的数字,如 200 毫秒)。使用 Thread.sleep()
对我来说也比使用更好
uiController.loopMainThreadForAtLeast() 当我的应用显示动画时(即使动画已从 testOptions 和 phone 设置中关闭)