Android 意式浓缩咖啡查询频率

Android 意式浓缩咖啡查询频率,android,android-espresso,Android,Android Espresso,我注意到,Espresso每五秒钟轮询一次特定的idlingsource的isIdleNow()方法 是否可以调整此粒度 提前谢谢 简短回答: 不,从3.0.1版开始,它被烘焙到IdlingPolicies.dynamicIdlingResourceWarningPolicy中,不受外部配置控制。此策略控制发布到处理程序的警告事件的频率。这些事件反过来导致调用isIdleNow() 稍长一点的回答: 这样做有很好的理由isIdleNow()不是设置应用程序状态的地方。调用isIdleNow()时

我注意到,
Espresso
每五秒钟轮询一次特定的
idlingsource
isIdleNow()
方法

是否可以调整此粒度

提前谢谢

简短回答:

不,从3.0.1版开始,它被烘焙到
IdlingPolicies.dynamicIdlingResourceWarningPolicy
中,不受外部配置控制。此策略控制发布到处理程序的警告事件的频率。这些事件反过来导致调用
isIdleNow()

稍长一点的回答:

这样做有很好的理由<代码>isIdleNow()不是设置应用程序状态的地方。调用
isIdleNow()
时,状态应该已经已知。应通过调用
ResourceCallback::onTransitionToIdle
更新状态,通常(99%的时间)不在
isIdleNow()内

文档提示您应该立即返回,但没有明确说明

更新
isIdleNow()
中的状态并不比有条件地休眠线程好多少。实际上,这会使情况变得更糟,因为您的测试现在每个测试慢5秒。这违背了浓缩咖啡的目的,因为它扼杀了测试的决定论。在我看来,由于内置的主线程同步和空闲资源接口,espresso测试的决定论使得它如此强大

因此,不需要修改此超时。调用
ResourceCallback::onTransitionToIdle
会将此事件发布到处理程序中,浓缩咖啡会立即继续

不幸的是,有很多例子,甚至博客都在宣传低效的实现

如果您想要一个更传统的空闲资源,这些例子应该是很好的灵感来源:

drawerractions$IdlingDrawerListener
与意式浓缩咖啡捆绑销售


CountingTaskExecutorRule
来自Room library,以下是它的详细说明。

非常感谢您的快速详细回复。让我读一下,然后再回复。再次感谢!嘿,弗拉德!!是的,你是对的,这种行为是用浓缩咖啡硬编码的,改变它的唯一方法是改变源代码并重新编译jar。在继续测试之前,我每隔一段时间执行一次
viewsertion
,以检查可见性(或其他任意
View
状态)。这非常有效,但有时Espresso在检查
ViewAssertion
之前等待太久,因为后台任务仍然没有空闲(我在这里没有太多选择,因为团队希望不惜一切代价让生产代码免于测试代码…我知道,对吧!?)。这真的很糟糕。想要使用
IdlingResource
,但现在无法使用,因为我的生产代码中的更改更改了
isIdleNow()的调用频率,而这是我无法更改的。我花了一整天的时间调试这个。