2010-03-08 10 views
31

क्या किसी को पता होगा कि किसी गतिविधि पर टोस्ट संदेश की उपस्थिति के लिए परीक्षण कैसे किया जाए?टोस्ट संदेश की उपस्थिति के लिए परीक्षण कैसे करें

मैं एक प्रोग्राम से अगले गतिविधि में अपने प्रोग्राम प्रवाह का परीक्षण करने के लिए this question पर ओपी पोस्ट किए गए कोड के समान कोड का उपयोग कर रहा हूं। मैं विशेष गतिविधियों पर टोस्ट संदेशों के परीक्षण के लिए भी सक्षम होना चाहता हूं।

उत्तर

22

किसी को भी एक गतिविधि पर एक टोस्ट संदेश की उपस्थिति के लिए परीक्षण करने के लिए कैसे पता होगा?

आप क्षमा नहीं कर सकते हैं। जिसके द्वारा, मेरा मतलब है एंड्रॉइड से पूछने का कोई तरीका नहीं है "अरे, एक टोस्ट दिखा रहा है? और यह कैसा दिखता है?"।

+1

उस कॉमन्सवेयर के लिए धन्यवाद। मैं शायद टोस्ट बनाने के दौरान टोस्ट संदेश के साथ एक वैरिएबल पॉप्युलेट करने की तरह कुछ करूँगा। यह उपयोगकर्ता के लिए अदृश्य हो जाएगा लेकिन मुझे जांच करने के लिए कुछ देगा। – Adrian

+9

वोला: myToast.getView()। IsShown()। –

12

एचएम, वास्तव में एक टोस्ट की उपस्थिति का परीक्षण करने की संभावना है। बस टोस्ट का एक उप-वर्ग बनाएं (उदा। MyOwnToast) और टोस्ट के बजाए अपने प्रोग्राम में इसका इस्तेमाल करें। इस उप-वर्ग में आप को सूचित करने के लिए शो() विधि को ओवरराइट कर सकते हैं, कि टोस्ट दिखाया जा रहा है।

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

सावधान रहें: शायद आपको टोस्ट ऑब्जेक्ट को क्लोन करना होगा या टोस्टडेटाबेस के लिए यह इसी दृश्य को देखना होगा क्योंकि शायद टोस्ट नष्ट होने के बाद यह शून्य हो जाएगा। उम्मीद है की यह मदद करेगा!

+0

उस भगवानफिंग के लिए धन्यवाद। मैंने वर्णित एक neater समाधान की तरह लगता है। – Adrian

+2

अच्छा विचार - लेकिन केवल परीक्षण उद्देश्यों के लिए उत्पादन कोड में कोड जोड़ते समय सावधान रहें। मैं अंतिम उत्पादन कोड में इस "टेस्ट कोड" को अक्षम करने के लिए एक विधि की अनुशंसा करता हूं, संभवतः मैनिफेस्ट में डिबगिंग ध्वज की जांच करके http://stackoverflow.com/a/4277868/383414 –

6

मैं जाँच, निम्न कार्य करता:

if(someToast == null) 
    someToast = Toast.makeText(this, "sdfdsf", Toast.LENGTH_LONG); 
boolean isShown = someToast.getView().isShown(); 
+1

यदि हम वास्तव में पूछ रहे हैं कि "कैसे हो सकता है एक ActivityUnitTestCase का कहना है कि उत्पादन कोड ने टोस्ट को ऐसी सामग्री के साथ निकाल दिया ", तो ऐसे परीक्षण को अतिरिक्त उत्पादन कोड पर निर्भर नहीं होना चाहिए। यदि, उदाहरण के लिए, आपने उस कोड को दोबारा दोहराया है, तो आप परीक्षण को तोड़ना नहीं चाहते हैं, जब उत्पादन में वास्तविक टोस्ट अभी भी प्रदर्शित होता है। – Phlip

2

आप टोस्ट जाँच framework.For Robolectric परीक्षण चुन सकते हैं, आप इसे नीचे के रूप में उपयोग कर सकते हैं:

assertTrue(ShadowToast.showedCustomToast("message", R.id.message)); //R.id.message: textView ID 
-3

मुझे यह पसंद है उपयोग कर रहा हूँ:

wait_for_text("Notification message to be verified", timeout: 30) 

यह एक वैकल्पिक तरीका है जो आंशिक रूप से उद्देश्य को पूरा करता है।

+0

wait_for_text() क्या है? इस नाम के साथ एंड्रॉइड एपीआई में कोई विधि नहीं है। –

+0

यदि आप जावा के अलावा किसी अन्य भाषा का उपयोग कर रहे हैं तो आपको निर्दिष्ट करना चाहिए। –

+0

"wait_for_text" रूबी –

8

हम वास्तव में robolectric का उपयोग कर टोस्ट संदेशों के लिए परीक्षण कर सकते हैं। इस आप एक कस्टम उपयोग कर रहे हैं मदद करता है

+0

में कैलाबैश एपीआई में एक विधि है, ऐसा लगता है कि उस समय के बीच जब आप 'PerformClick()' कहते हैं और यह कहते हैं कि यह संभव है कि टोस्ट अभी तक प्रकट नहीं हुआ है और जोर के बाद दिखाई देगा खत्म। हम इस संभावना के लिए कैसे खाते हैं? –

+0

रोबोलेक्ट्रिक में एक छाया हैडलर.इडलमेन लूपर जिसे बहिष्कृत किया गया है। हालांकि एक छाया Looper.idleMainLooper() है जिसमें कई कार्यान्वयन हैं। उनमें से एक निष्पादन को ट्रिगर करने के लिए पैरामीटर के रूप में "समय" लेता है .. – user2511882

2

आप की जांच कर सकता है कि टोस्ट संदेश

ShadowToast.showedToast("expected message") 

द्वारा दिखाया गया था

@Test 
    public void ccButtonDisplaysToast() throws NullPointerException { 
     Button ccRedButton = (Button) findViewById(R.id.cc_red); 
     cc_red.performClick(); --> this calls the actual onClickListener implementation which has the toast. 
     ShadowLooper.idleMainLooper(YOUR_TIME_HERE); --> This may help you. 
     assertThat(ShadowToast.getTextOfLatestToast().toString(), equalTo("TEST_YOUR_TEXT_HERE")); 
    } 

आशा: नीचे दिए गए उदाहरण कैसे हमारी टीम अब के लिए यह कर रहा है टोस्ट

ShadowToast.showedToast("expected message", R.id.yourToastId) 
संबंधित मुद्दे