我注意到Espresso
每五秒钟轮询一个特定的IdlingResource
方法。
是否可以调整此粒度?
提前谢谢!
最佳答案
简短回答:
不,它被烘焙到IdlingPolicies.dynamicIdlingResourceWarningPolicy
中,从3.0.1版起不受外部配置控制。此策略控制发布到处理程序的警告事件的频率。这些事件依次导致调用isIdleNow()
稍长的回答:
这是一个很好的理由。isIdleNow()
不是设置应用程序状态的地方。在调用isIdleNow()
时,应该已经知道状态。状态应该通过调用ResourceCallback::onTransitionToIdle
来更新,并且通常(99%的时间)不在isIdleNow()
之内。
文档中提示您应该立即返回,但没有明确说明。
更新isIdleNow()
中的状态并不比有条件地休眠线程要好多少。实际上,更糟的是,因为你的测试在每次测试的基础上慢了5秒。它破坏了浓缩咖啡的目的,因为它扼杀了测试的决定论。在我看来,由于内置的主线程同步和空闲资源接口,espresso测试的决定论使它如此出色。
既然如此,就不需要修改这个超时。调用ResourceCallback::onTransitionToIdle
将向处理程序发送此事件,浓缩咖啡将立即继续。
不幸的是,有很多例子甚至博客都在提倡低效的实现。
如果你想要更传统的空闲资源,这些例子应该是很好的灵感来源:
okhttp idling resourceDrawerActions$IdlingDrawerListener
与浓缩咖啡捆绑在一起。here is the sourceCountingTaskExecutorRule
从房间图书馆,这里是它的usage。