在这段视频来自谷歌2016年I/O中,Wojtekński建议在Espresso测试中使用uiController.loopMainThreadForAtLeast
而不是Thread.sleep
。当然,上下文是围绕空闲资源的,但是两者之间有什么区别,为什么其中一个比另一个好呢?
发布于 2019-06-06 23:27:42
Espresso使用队列来检查应用程序是否空闲。
Thread.sleep(x) = //Waits x
uiController.loopMainThreadForAtLeast(x) // Waits x + more if app is still not idle
现在,这两种方法都是非常糟糕的,这将导致生产代码中的一些问题。
uiController.loopMainThreadForAtLeast(x)
也会被跳过。IdlingResources
来指定什么时候应用程序不是空闲的并不是一个好的解决方案。您不应该更改生产代码来测试您的应用程序和空闲资源,检查应用程序是否空闲,每隔5秒钟就会造成大量的测试开销。假设您有100个测试用例,您将在其中体验到这个间隔,那么您将经历的开销将是巨大的。Thread.sleep(x)
本身显然是个坏主意。由于您的测试需要是稳定的,无论互联网连接的速度,电话等,你不应该等待固定的时间。当您从服务器请求某件东西时,您不知道需要等待多长时间,所以您决定的x
要么太大,要么太小。最好的解决方案是检查断言/操作中的目标视图是否存在,如果没有,则在X秒后再次检查目标视图(其中X是一个像200 millis这样的小数字)。此外,在我的应用程序显示动画时,使用Thread.sleep()
比使用uiController.loopMainThreadForAtLeast()更有效(即使在testOptions和电话设置关闭动画时)
https://stackoverflow.com/questions/56396876
复制相似问题