¿Cómo se obtiene un Idlingresource para trabajar en Kotlin con corutinas?

Mi Espresso Idling Resource no funciona; se comstack y se ejecuta, pero ya no espera el time suficiente para que el resultado se devuelva desde la networking.


  1. Comience con https://github.com/chiuki/espresso-samples/tree/master/idling-resource-okhttp
  2. Convierta la actividad principal en Kotlin: la testing (que todavía está en Java) todavía funciona con OKHttpIdlingResource
  3. Convierte a anko coroutine call en lugar de retrofit.enqueue – test ya no funciona.

Aquí está el nuevo código para MainActivity en su totalidad

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!! } } 

Convert to anko coroutine call instead of retrofit.enqueue - test no longer works.

retrofit.enqueue usa el despachador de OkHttp. Esto es lo que el "idling-resource-okhttp" reconoce y comunica al administrador de resources idling.

Sin embargo, al utilizar retrofit.execute y ang's bg está utilizando un mecanismo de ejecución diferente que el gestor de resources idling desconoce, por lo tanto, mientras esté ejecutándose, la aplicación está inactiva desde la vista del administrador, y así finaliza la testing.

Para solucionar esto, debe registrar un IdlingResource para cualquier mecanismo de ejecución que bg use, de modo que pueda reconocer cuándo ocurre algo en ese hilo de ejecución.