2012-01-13 12 views
7

TouchUtilsクラスのメソッドを使用して、誰でもAndroidエミュレータでユニットテストを正常に実行できましたか?
私のデバイスにテストを渡すことができますが、エミュレータで全く同じテスト(およびテストスイート)を実行すると、TouchUtilsメソッドを使用するテストでは常に次の例外がスローされます。Androidエミュレータ付きTouchUtils

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

私はキーガードのロックを解除し、パスした他の(TouchUtils以外の)テストケースを実行しました。
@UiThreadTestが適用されていません。また、UIスレッドでコードを実行する必要があるものもありません。
TouchUtils.dragViewTo(...)という行をコメントアウトして単純なassert(true)を入力すると、テストが実行されてパスします。

アイデア?

+1

回答が見つかりましたか?私はこのトラブルで走っているし、問題を見つけるのもあまりありません。 – Egor

答えて

2

携帯電話がロックされている場合や、ホームスクリーンに他のアクティビティがある場合に発生します。

+0

私の携帯電話で動作しますが、エミュレータでは動作しません。 エミュレータで他のテストが実行されているのを見ると、ロックを画面から削除しました。 –

0

エミュレータが非常に遅いため、仮想キーボードを閉じた後にUIのやりとりをエミュレートすると、仮想キーボードが閉じる時間が足りず、仮想キーボードに実際にイベントを注入しています応用。

ソフトキーボードを隠してからUIの操作を試みる前に、約500-1000msの間あなたのスレッドで単にスリープしてください。

try { 
    Thread.sleep(500); 
} 
catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
関連する問題