2012-01-13 15 views
7

¿Alguien ha podido realizar con éxito las pruebas unitarias en el emulador de Android utilizando los métodos ofrecidos por la clase TouchUtils?
Puedo hacer que la (s) prueba (s) pasen en mi dispositivo pero cuando ejecuto las mismas pruebas exactas (y suite de pruebas) en un emulador, cualquier prueba que use un método TouchUtils siempre arroja la siguiente excepción:TouchUtils con Android Emulator

java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission 
at android.os.Parcel.readException(Parcel.java:1327) 
at android.os.Parcel.readException(Parcel.java:1281) 
at android.view.IWindowManager$Stub$Proxy.injectPointerEvent(IWindowManager.java:1196) 
at android.app.Instrumentation.sendPointerSync(Instrumentation.java:902) 
at android.test.TouchUtils.drag(TouchUtils.java:786) 
at android.test.TouchUtils.dragViewTo(TouchUtils.java:633) 
... 

he desbloqueado el bloqueo del teclado e incluso corriendo otros (no) TouchUtils casos de prueba que han pasado.
No tengo el @UiThreadTest aplicado ni estoy ejecutando nada que requiera código para ejecutarse en el hilo de la interfaz de usuario.
Cuando comento la línea que emplea TouchUtils.dragViewTo(...) y pongo en un simple assert(true), la prueba se ejecuta y aprueba.

¿Alguna idea?

+1

¿Has encontrado la respuesta? Estoy corriendo con este problema también y no hay mucho que encontrar sobre el tema. – Egor

Respuesta

2

Sucede si su teléfono está bloqueado o si hay alguna otra actividad en la pantalla de inicio.

+0

Funciona en mi teléfono, no funciona en el emulador. He eliminado el bloqueo de la pantalla, ya que puedo ver otras pruebas que se ejecutan en el emulador. –

0

El emulador es tan lento que cuando emula una interacción de UI después de cerrar el teclado virtual, no hay tiempo suficiente para que el teclado virtual se cierre y por lo tanto está inyectando eventos en el teclado virtual y no en su solicitud.

Simplemente duerma en su hilo durante aproximadamente 500-1000ms antes de intentar realizar cualquier interacción de interfaz de usuario después de ocultar el teclado virtual.

try { 
    Thread.sleep(500); 
} 
catch (InterruptedException e) { 
    e.printStackTrace(); 
}