我已经复制了您的问题,然后解决了问题。
我需要在你的 gradle 中添加 implementation 和 androidTestImplementation 中的 espresso-idling-resource 库:
implementation 'androidx.test.espresso:espresso-idling-resource:3.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.3.0'
这样我可以在我的项目中创建CountingIdlingResourceSingleton 对象:
object CountingIdlingResourceSingleton {
private const val RESOURCE = "GLOBAL"
@JvmField val countingIdlingResource = CountingIdlingResource(RESOURCE)
fun increment() {
countingIdlingResource.increment()
}
fun decrement() {
if (!countingIdlingResource.isIdleNow) {
countingIdlingResource.decrement()
}
}
}
然后,当您希望测试等待时,您应该在代码中调用它,在我的情况下,它位于显示的第一个片段的 onViewCreated() 中:
CountingIdlingResourceSingleton.increment()
当第一个流元素到达时,我刚刚调用了:
CountingIdlingResourceSingleton.decrement()
最后在你的测试类中添加这个,让它等到countingIdlingResource减少:
init {
IdlingRegistry.getInstance()
.register(CountingIdlingResourceSingleton.countingIdlingResource)
}
@After
fun unregisterIdlingResource() {
IdlingRegistry.getInstance()
.unregister(CountingIdlingResourceSingleton.countingIdlingResource)
}
这样,检查该值是否与 flow (Jody) 返回的第一个值匹配的测试有效。
可以在github.com/jeprubio/waitflow 中找到一个工作示例,其中每 5 秒发出一个流元素,并且 espresso 测试等待直到第一个元素发出,即 CountingIdlingResourceSingleton 递减。