Nur*_*lov 4 android-testing android-espresso kotlin-flow
在我的应用程序中,我使用 Kotlin Flow。之前我使用 挂起函数 EspressoIdlingResource.increment(),但它不适用于 Kotlin Flow。如何解决这个问题呢?
我已经复制了你的问题,然后让它发挥作用。
我需要在你的 gradle 中添加espresso-idling-resourcelibimplementation和androidTestImplementation:
implementation 'androidx.test.espresso:espresso-idling-resource:3.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.3.0'
Run Code Online (Sandbox Code Playgroud)
这样我就可以在我的项目中创建CountingIdlingResourceSingleton对象:
object CountingIdlingResourceSingleton {
private const val RESOURCE = "GLOBAL"
@JvmField val countingIdlingResource = CountingIdlingResource(RESOURCE)
fun increment() {
countingIdlingResource.increment()
}
fun decrement() {
if (!countingIdlingResource.isIdleNow) {
countingIdlingResource.decrement()
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当您希望测试等待时,您应该在代码中调用它,在我的例子中,它位于onViewCreated()显示的第一个片段中:
CountingIdlingResourceSingleton.increment()
Run Code Online (Sandbox Code Playgroud)
当第一个流程元素到达时,我刚刚调用:
CountingIdlingResourceSingleton.decrement()
Run Code Online (Sandbox Code Playgroud)
最后将其添加到您的测试类中,以使其等待,直到countingIdlingResource 递减:
init {
IdlingRegistry.getInstance()
.register(CountingIdlingResourceSingleton.countingIdlingResource)
}
@After
fun unregisterIdlingResource() {
IdlingRegistry.getInstance()
.unregister(CountingIdlingResourceSingleton.countingIdlingResource)
}
Run Code Online (Sandbox Code Playgroud)
这样,检查该值是否与流 (Jody) 返回的第一个值匹配的测试就可以工作。
可以在github.com/jeprubio/waitflow中找到一个工作示例,其中每 5 秒发出一个流元素,并且 espresso 测试会等待直到发出第一个元素,即 CountingIdlingResourceSingleton 递减。
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |