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.
- Definición de un constructor pnetworkingeterminado y un constructor secundario en Kotlin, con properties
- Crear una ArrayList de elementos únicos en una ArrayList
- Inicialización de val por desestructuración en Kotlin
- Tipo Lambda con un número desconocido de arguments
- Error al imprimir el número primo usando funciones de order alto en kotlin
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.
- ¿Clase no encontrada en kotlin?
- Al aplicar el complemento 'kotlin-android' en una aplicación instantánea, se obtiene como resultado que "null no se puede convertir a tipo no nulo com.android.build.gradleBasePlugin"
- Kotlin delegando a un futuro
- ¿Qué tipo de time de compilation debo asignar para recibir un valor de retorno de java.util.Map <TextAttribute,?>
- Cómo atrapar muchas excepciones al mismo time en Kotlin
- Ejecute testings junit escritas en Kotlin con la anotación @category
- ¿Por qué Intellij Idea Console pausa para la input del usuario?
- Kotlin Kapt no muestra errores de data binding cuando se ejecuta desde Android Studio
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.
- Cambiar solo un método de una class de java a kotlin
- ¿Pasar lambdas a Observable.subscribe en kotlin dará como resultado pérdidas de memory?