2012-01-13 45 views
7

有沒有人能夠使用TouchUtils類提供的方法在Android模擬器上成功執行單元測試?
我能夠讓測試通過我的設備,但是當我在模擬器上運行完全相同的測試(和測試套件)時,任何使用TouchUtils方法的測試都會引發以下異常:TouchUtils with 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) 
... 

我解鎖了keyguard,甚至運行了其他(非TouchUtils)已通過的測試用例。
我沒有應用@UiThreadTest,我是否還需要運行任何需要在UI線程上運行的代碼。
當我註釋掉使用TouchUtils.dragViewTo(...)的行並放入簡單的assert(true)時,測試運行並通過。

任何想法?

+1

您是否找到答案?我也遇到了這個麻煩,並且沒有太多可以找到的問題。 – Egor 2012-09-20 07:47:08

回答

2

如果您的手機被鎖定或HomeScreen上有其他活動,就會發生這種情況。

+0

它適用於我的手機,它不適用於模擬器。 我已經從屏幕上刪除了鎖,因爲我可以看到仿真器上正在運行的其他測試。 – 2012-01-14 16:03:32

0

模擬器非常慢,當您在關閉虛擬鍵盤後模擬UI交互時,沒有足夠的時間讓虛擬鍵盤解散,因此實際上將事件注入虛擬鍵盤而不是您的應用。

在隱藏軟鍵盤之後嘗試進行任何UI交互之前,只需在您的線程上睡大約500-1000ms即可。

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