2012-01-13 12 views
7

Czy ktoś był w stanie pomyślnie przeprowadzić testowanie jednostkowe w emulatorze systemu Android przy użyciu metod oferowanych przez klasę TouchUtils?
Jestem w stanie uzyskać test (y) do przekazania na moim urządzeniu, ale kiedy przeprowadzę dokładnie te same testy (i zestaw testów) na emulatorze, każdy test przy użyciu metody TouchUtils zawsze zgłasza następujący wyjątek:TouchUtils z emulatorem Androida

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) 
... 

mam odblokowane blokadę klawiatury, a nawet prowadził inne (nie TouchUtils) przypadki testowe, które przeszły.
Nie mam zastosowanego @UiThreadTest i nie uruchomię niczego, co wymaga kodu do uruchomienia w wątku interfejsu użytkownika.
Po zakomentowaniu linii, która zatrudnia TouchUtils.dragViewTo(...) i umieszczeniu prostego assert(true), test działa i przechodzi.

Wszelkie pomysły?

+1

Czy znalazłeś odpowiedź? Biegnę też z tymi problemami i nie ma zbyt wiele do znalezienia w tej kwestii. – Egor

Odpowiedz

2

Zdarza się, gdy telefon jest zablokowany lub występuje inna aktywność na ekranie głównym.

+0

Działa na moim telefonie, nie działa na emulatorze. Usunąłem blokadę z ekranu, ponieważ widzę inne testy uruchamiane na emulatorze. –

0

Emulator jest tak powolny, że emulując interakcję interfejsu użytkownika po zwolnieniu wirtualnej klawiatury, nie ma wystarczająco dużo czasu, aby wirtualna klawiatura mogła zostać odrzucona, a więc w rzeczywistości wprowadzasz zdarzenia do wirtualnej klawiatury, a nie do podanie.

Po prostu spać na swoim wątku przez około 500-1000 ms, zanim podejmiesz próby interakcji interfejsu użytkownika po ukryciu klawiatury.

try { 
    Thread.sleep(500); 
} 
catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
Powiązane problemy