2012-01-13 10 views
7

क्या कोई भी TouchUtils कक्षा द्वारा प्रदान की गई विधियों का उपयोग करके एंड्रॉइड एमुलेटर पर यूनिट परीक्षण सफलतापूर्वक करने में सक्षम है?
मैं अपने डिवाइस पर पास करने के लिए परीक्षण प्राप्त करने में सक्षम हूं लेकिन जब मैं एक एमुलेटर पर सटीक एक ही परीक्षण (और परीक्षण सूट) चलाता हूं, तो TouchUtils विधियों का उपयोग करके कोई भी परीक्षण हमेशा निम्न अपवाद फेंकता है:एंड्रॉइड एमुलेटर के साथ 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) 
... 

मैंने कीगार्ड को अनलॉक कर दिया है और यहां तक ​​कि अन्य (गैर टचयूल्ट) परीक्षण मामलों को भी पारित किया है।
मेरे पास @UiThreadTest लागू नहीं है और न ही मैं कुछ भी चला रहा हूं जिसके लिए यूआई थ्रेड पर चलाने के लिए कोड की आवश्यकता है।
जब मैं TouchUtils.dragViewTo(...) पर नियोजित लाइन पर टिप्पणी करता हूं और एक साधारण assert(true) डालता हूं, तो परीक्षण चलता है और पास होता है।

कोई विचार?

+1

क्या आपको उत्तर मिला है? मैं भी इस परेशानी के साथ चल रहा हूं और इस मुद्दे पर खोजने के लिए बहुत कुछ नहीं है। – Egor

उत्तर

2

ऐसा होता है यदि आपका फोन लॉक हो या होमस्क्रीन पर कुछ अन्य गतिविधि हो।

+0

यह मेरे फोन पर काम करता है, यह एमुलेटर पर काम नहीं करता है। मैंने स्क्रीन से लॉक हटा दिया है क्योंकि मैं एमुलेटर पर चलने वाले अन्य परीक्षण देख सकता हूं। –

0

एमुलेटर इतना धीमा है, कि जब आप वर्चुअल कीबोर्ड को खारिज करने के बाद यूआई इंटरैक्शन का अनुकरण करते हैं, तो वर्चुअल कीबोर्ड को खारिज करने के लिए पर्याप्त समय नहीं होता है और इसलिए आप वास्तव में वर्चुअल कीबोर्ड में ईवेंट इंजेक्ट कर रहे हैं और नहीं आवेदन।

सॉफ्ट कीबोर्ड को छिपाने के बाद आप किसी भी UI इंटरैक्शन करने का प्रयास करने से पहले 500-1000ms के लिए बस अपने धागे पर सो जाओ।

try { 
    Thread.sleep(500); 
} 
catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
संबंधित मुद्दे