ClassCastException con el método bindService de ServiceTestRule

He escrito una function para get services enlazados utilizando ServiceTestRule, que es el siguiente:

class Parent { companion object { fun <T : AbstractUIService> getBoundService(clazz: Class<T>): T { var binder: IBinder? = null while (binder == null) { binder = serviceTestRule.bindService( Intent(InstrumentationRegistry.getTargetContext().applicationContext, clazz)) } return (binder as LocalBinder<T>).service } } } 

Esta class es henetworkingada por las classs que tienen los casos de testing. Obtengo el 'service encuadernado' usando esta function en la function @BeforeClass del object compañero de la class infantil.

 class ChildATests: Parent() { companion object { lateinit var serviceA: ServiceA @BeforeClass @JvmStatic fun setUp() { serviceA = getBoundService(ServiceA::class.java) } } } 

Esto funciona bien si tengo que ejecutar solo una class Child * Tests. Pero cuando ejecuto todo el set, la primera class funciona bien, pero el rest de las classs falla con el siguiente error:

java.lang.ClassCastException: ServiceB no se puede convertir a ServiceA

Tenga en count que solo puedo get un service vinculado dentro de una class Child * Tests. Si bash get otro service enlazado en la misma class, falla con el mismo error.

Si se necesitan más detalles para aclarar la situación, por favor avíseme.

La solución a este problema es usar el adaptador ServiceConnection con el método bindService de ServiceTestRule. Entonces mi function getBoundService ahora se ve así:

 fun <T : AbstractUIService> getBoundService(clazz: Class<T>): T { val serviceConnectionAdapter = doOperationWithLatch { val adapter = ServiceConnectionAdapter(it) serviceTestRule.bindService( Intent(InstrumentationRegistry.getTargetContext().applicationContext, clazz), adapter, Context.BIND_AUTO_CREATE ) adapter } as ServiceConnectionAdapter return (serviceConnectionAdapter.service as LocalBinder<T>).service } 

donde es un CountDownLatch.

  • Kotlin marcó excepciones alternativa
  • BiMap / hashmap bidireccional en Kotlin
  • ¿Cómo puedo ejecutar las testings de kotlintest con gradle?
  • patrón Lateinit, perezoso e individual en kotlin
  • La animation SwipeRefreshLayout del primer bash de actualización se ejecuta sin parar
  • Kotlin con stack RxKotlinFX da un error de class de acceso
  • ¿Ejecutando Kotlin Code en SBT / Play Framework?
  • ¿Podemos usar infix methods generics en Kotlin?
  • Implementando TypeAdapterFactory con TypeAdapter en Kotlin
  • ¿Hay alguna manera de pasar una reference de function entre actividades?
  • ¿Tiene Kotlin un equivalente a opciones opcionales de envoltura implícita en Swift?