2010-10-28 9 views
33

मेरे पास एक कक्षा है जो एंड्रॉइड में स्टेटस बार अधिसूचना भेजती है। मुझे यह जांचने का कोई तरीका नहीं मिल रहा है कि अधिसूचना भेजी गई थी या नहीं, जिससे किसी भी तरह का उपयोगी यूनिट परीक्षण लिखना बहुत मुश्किल हो जाता है।क्या मैं एंड्रॉइड के परीक्षण ढांचे का उपयोग कर स्टेटस बार अधिसूचनाओं का परीक्षण कर सकता हूं?

क्या किसी के पास इसका समाधान है?

+0

रोबोटियम नामक एक परीक्षण ढांचा है, लेकिन मुझे नहीं पता कि यह अधिसूचनाओं का समर्थन करता है या नहीं। लेकिन यदि मानक जूनिट लिब इसका समर्थन नहीं करता है, तो आप वहां शायद जांच सकते हैं। http://code.google.com/p/robotium/ –

उत्तर

2

रोबोटियम अधिसूचना बार के साथ बातचीत नहीं कर सकता है। आप एक आवेदन तक ही सीमित हैं। robotium के लिए पूछे जाने वाले प्रश्न की जाँच करें, वहाँ है इस का उल्लेख: http://code.google.com/p/robotium/wiki/QuestionsAndAnswers

5

शायद नहीं जवाब आप के लिए देख रहे हैं, लेकिन हमेशा की तरह समाधान के लिए है:

  • एक अंतरफलक अधिसूचना कार्यक्षमता सार संक्षेप बनाएँ।
  • एक डिफ़ॉल्ट कार्यान्वयन बनाएँ जो सिस्टम अधिसूचना API को प्रतिनिधि करता है।
  • परीक्षण चलाते समय परीक्षणों का समर्थन करने वाले नकली कार्यान्वयन के साथ डिफ़ॉल्ट कार्यान्वयन को प्रतिस्थापित (या सजाने)।

यह निम्न तकनीक के साथ सरल किया जा सकता:

  • (इस तरह के RoboGuice के रूप में) निर्भरता इंजेक्शन चौखटे कार्यान्वयन के चुनाव को कारगर बनाने के।
  • नकली पुस्तकालय (जैसे EasyMock) मॉक कार्यान्वयन के निर्माण को स्वचालित करने के लिए।
1

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

4

NotificationManager बढ़ाकर एक मॉक ऑब्जेक्ट बनाने का प्रयास करें और notify() विधियों को ओवरराइड करें। ओवरराइड कार्यों पर जोर दिया जा सकता है। अपने परीक्षण मामले में, मॉक को विषय गतिविधि में इंजेक्ट करें और एंड्रॉइड जुनीट टेस्ट का उपयोग करके परीक्षण चलाएं।

2

UI Testing

यह आपको क्या मुझे लगता है कि चाहते हैं। यूओयूटोमेटर।

केवल एंड्रॉइड 4.1 या उसके बाद के संस्करण पर काम करता है। आपको पहले नमूना कोड चलाने की आवश्यकता है।

आप पुल-डाउन-स्टेटस-बार एक्शन करने के लिए कोड का एक टुकड़ा लिख ​​सकते हैं और फिर अपनी चीजें कर सकते हैं। यह केवल यूआई परीक्षण है। आप यूआईयूटोमेटर के साथ अपने डेटा का परीक्षण नहीं कर सकते हैं।

आशा है कि इससे मदद मिलेगी।

-1

बस कुछ समय बचाने के लिए: ऐसी चीज जो दिखती है उसे नोटिफिकेशन का पता लगाना चाहिए, लेकिन नहीं, NO_CREATE ध्वज के साथ लंबित इंटेन्टेंट बनाने की कोशिश कर रहा है।

चूंकि एक मौजूदा अधिसूचना के समान मूल्यों के साथ लंबित इंटेन्टेंट बनाने का प्रयास करता है, लेकिन NO_CREATE ध्वज के साथ, शून्य वापस आना चाहिए, ऐसा लगता है कि यह बताएगा कि अधिसूचना में पहले से कोई एक है या नहीं।

अफसोस की बात है, यह विश्वसनीय नहीं लगता है।

1

आप एक एमुलेटर है, सिर्फ परीक्षण के इन प्रकार के लिए, एंड्रॉयड Marshmallow (एपीआई 23) के साथ उपयोग कर सकते हैं।

उदाहरण के लिए:

public void testCheckNotification_2() throws IOException, InterruptedException, GcmException 
{ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     GcmResponse gcmResponse = endPointImp.sendGcmMulticastRequestImp(getGcmMultiRequest()); 
     assertThat(gcmResponse.getSuccess(), is(1)); 
     Thread.sleep(2000); 
     assertThat(mManager.getActiveNotifications().length, is(1)); 
     StatusBarNotification barNotification = mManager.getActiveNotifications()[0]; 
     assertThat(barNotification.getId(), is(INCIDENCIA.getTitleRsc())); 

     // We check the pending intent. 
     PendingIntent pendingIntent = barNotification.getNotification().contentIntent; 
     assertThat(pendingIntent.getCreatorPackage(), is(GcmRequest.PACKAGE_DIDEKINDROID)); 
    } 
} 

महत्वपूर्ण हिस्सा NotificationManager (mManager) करने के लिए कॉल करें कि यह Google FCM http समाप्ति बिंदु को एक बहुस्त्र्पीय संदेश भेजने के बाद सक्रिय सूचना की जांच करने के लिए है।

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