我的 Espresso Idling 资源不工作 - 它编译并运行但不再等待足够长的时间以从“网络”返回结果。
- 从 https://github.com/chiuki/espresso-samples/tree/master/idling-resource-okhttp 开始
- 将主要 Activity 转换为 Kotlin - 测试(仍在 java 中)仍然适用于 OKHttpIdlingResource
- 转换为 anko 协程调用而不是 retrofit.enqueue - 测试不再有效。
这是 MainActivity 的完整新代码
import android.app.Activity
import android.os.Bundle
import android.widget.TextView
import kotlinx.coroutines.experimental.android.UI
import kotlinx.coroutines.experimental.async
import org.jetbrains.anko.coroutines.experimental.bg
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
doCallAsync()
}
private fun doCallAsync() = async(UI) {
val user = bg { getUser() }
val name = user.await().name
val nameView = findViewById(R.id.name) as TextView
nameView.text = name;
}
private fun getUser(): User {
val retrofit = Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(MoshiConverterFactory.create())
.client(OkHttpProvider.getOkHttpInstance())
.build()
val service = retrofit.create(GitHubService::class.java)
val response = service.getUser("chiuki").execute().body()
return response!!
}
}
最佳答案
转换为 anko 协程调用而不是 retrofit.enqueue - 测试不再有效。
retrofit.enqueue
使用 OkHttp 的调度程序。这是“idling-resource-okhttp”识别并与 idlingresource 管理器通信的内容。
然而,通过使用 retrofit.execute
和 anko 的 bg
,您正在使用 idlingresource 管理器不知道的不同执行机制,因此虽然它可能正在执行应用程序从经理的角度来看是空闲的,因此结束了测试。
要解决此问题,您需要为 bg
使用的任何执行机制注册一个 IdlingResource
,以便它可以识别该执行线程何时发生某些事情。
关于android - 你如何让 Idling 资源在 Kotlin 中与协程一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45682582/