2015-06-16 8 views
9

हम अपने कैमरे कार्यक्षमता के आसपास कुछ यूआई परीक्षण है स्विच करने के बाद काम करना बंद कर, और उसके बाद हम एस्प्रेसो/JUnit4 के लिए हमारी चाल के हिस्से के रूप AndroidJUnitRunner को InstrumentationTestRunner से स्विच कर दिया, हम अब चला सकते हैं हमारे मौजूदा परीक्षण मज़बूती से लगातार RuntimeException की वजह से हम पर कब कॉल getActivity():मौजूदा एंड्रॉयड यूआई परीक्षण करने के लिए AndroidJUnitRunner

आशय आशय लॉन्च नहीं कर सका {FLG = 0x14000000:

java.lang.RuntimeException: Could not launch intent Intent { flg=0x14000000 cmp=com.cookbrite.dev/com.cookbrite.ui.ReceiptCaptureActivity (has extras) } within 45 seconds. Perhaps the main thread has not gone idle within a reasonable amount of time? There could be an animation or something constantly repainting the screen. Or the activity is doing network calls on creation? See the threaddump logs. For your reference the last time the event queue was idle before your activity launch request was 1434471981236 and now the last time the queue went idle was: 1434471981236. If these numbers are the same your activity might be hogging the event queue. 
at android.support.test.runner.MonitoringInstrumentation.startActivitySync(MonitoringInstrumentation.java:315) 
at android.test.InstrumentationTestCase.launchActivityWithIntent(InstrumentationTestCase.java:119) 
at android.test.ActivityInstrumentationTestCase2.getActivity(ActivityInstrumentationTestCase2.java:106) 
at com.cookbrite.step2_functional.ui.receipt.ReceiptCaptureTest.getActivity(ReceiptCaptureTest.java:43) 

बेहतर readibility के लिए, इस उद्धरण के रूप में RuntimeException पर त्रुटि संदेश है cmp = com.cookbrite.dev/com.cookbrite.ui.ReceiptCaptureActivity ( अतिरिक्त)} 45 सेकंड के भीतर}। शायद मुख्य धागा उचित समय के भीतर निष्क्रिय नहीं हुआ है? स्क्रीन पर लगातार कुछ एनीमेशन या हो सकता है। या गतिविधि निर्माण पर नेटवर्क कॉल कर रही है? थ्रेडडंप लॉग देखें। आपके संदर्भ के लिए पिछली बार ईवेंट कतार आपके गतिविधि लॉन्च से पहले निष्क्रिय था अनुरोध 1434471981236 था और अब पिछली बार कतार निष्क्रिय हो गई थी थी: 1434471981236. यदि ये संख्याएं समान हैं तो आपकी गतिविधि ईवेंट कतार को हॉगिंग कर सकती है।

हमारे मौजूदा परीक्षण रोबोटियम का उपयोग करते हैं। एस्प्रेसो का उपयोग करके एक ही परीक्षण को लिखने का प्रयास इसी तरह की त्रुटि उत्पन्न करता है, जो शायद यूआई को अद्यतन करने के लिए कैमरा पूर्वावलोकन के कारण होता है। हालांकि, पूर्वावलोकन के साथ भी INVISIBLE पर सेट किया गया है, हम अभी भी एस्प्रेसो के साथ इस समस्या में भाग लेते हैं।

इसे ठीक करने के तरीके पर कोई विचार/पॉइंटर्स (InstrumentationTestRunner पर वापस जाने के अलावा)?

+0

रोबोटियम परीक्षण ठीक चल रहा है जब आपके पास पूर्वावलोकन को सेट किया गया है या – user2511882

+0

चला गया है, तो रोबोटियम परीक्षण अभी भी उसी RuntimeException के साथ विफल रहता है जब समीक्षा अविश्वसनीय रूप से सेट की जाती है। – Yenchi

+0

ठीक है .. हमने इससे पहले अनुभव किया है ... हमारे मामले में ऐसा इसलिए था क्योंकि हम प्रत्येक बटन क्लिक पर नई गतिविधियां लॉन्च करते थे .. और नतीजतन रोबोटिटम बाहर निकलता था .. हमें आंसू में सभी गतिविधियों को मारना पड़ा .. – user2511882

उत्तर

0

अंत में, हम कैमरा पूर्वावलोकन स्टार्टअप तो MonitoringInstrumentation देरी करने के लिए सभी यूआई अद्यतन के साथ परेशान नहीं मिलता है यूआई बदल जाते हैं। साथ ही, SurfaceView और TextureView जैसे ही कैमरे कनेक्ट होते हैं, यूआई अपडेट अपडेट होते हैं, यहां तक ​​कि INVISIBLE या GONE स्थिति में भी। हमारे मामले में छोड़ने के लिए MonitoringInstrumentation का कारण बनता है।

यदि आपके पास एक परीक्षण है जो लगातार यूआई अपडेट के साथ शुरू होता है, तो आप startActivitySync() खत्म होने तक कार्रवाई को रोकने पर विचार करना चाहेंगे और आपको getActivity() से गैर-शून्य परिणाम मिलेंगे।

0

त्रुटि आउटपुट इंगित करता है कि परीक्षण वर्ग ActivityInstrumentationTestCase2 फैली हुई है। मुझे यकीन नहीं है कि नए ActivityTestRule पर जाने से आपके मामले में कोई फर्क पड़ता है, लेकिन यह एक त्वरित जांच के लायक है। क्रम में एक जवाब के बजाय एक टिप्पणी में यह लाना नमूना कोड शामिल करने के लिए:

@RunWith(AndroidJUnit4.class) 
public class ReceiptCaptureTestNew { 
    private ReceiptCaptureActivity mReceiptCaptureActivity; 

    @Rule 
    public ActivityTestRule<mReceiptCaptureActivity> mActivityRule = 
      new ActivityTestRule<>(mReceiptCaptureActivity.class); 

    @Before 
    public void setUp() throws Exception { 
     mReceiptCaptureActivity = mActivityRule.getActivity(); 
    } 

    @After 
    public void tearDown() throws Exception { 
     // Call finish() on all activities in @After to avoid exceptions in 
     // later calls to getActivity() in subsequent tests 
     mReceiptCaptureActivity.finish(); 
    } 

    @Test 
    public void testPreconditions() { 
     assertNotNull(mReceiptCaptureActivity); 
     assertThat(mReceiptCaptureActivity.hasWindowFocus(), is(true)); 
    } 
} 
+0

का उपयोग कर रहे हैं दुर्भाग्यवश जब मैं एस्प्रेसो में एक ही परीक्षण लिखता हूं, तो मैंने गतिविधि नियम + जूनिट 4Runner का उपयोग किया और मुझे एक ही परिणाम मिला। लेकिन जवाब के लिए धन्यवाद! – Yenchi

संबंधित मुद्दे