2010-11-01 9 views
11

शायद मुझे कुछ याद आ रहा है। मैं ब्रॉडकास्ट रिसीवर के लिए टेस्ट केस लिखना चाहता हूं; विशेष रूप से, यह BOOT_COMPLETED ईवेंट प्राप्त करने और बाद में संभालने के लिए किसी अन्य रिसीवर के लिए अलार्म सेट करने के लिए है; ऐसा लगता है कि यह ठीक से स्थापित नहीं हो रहा है, लेकिन मुद्दा यह है कि इसका परीक्षण करने का कोई स्पष्ट तरीका नहीं है। मैं वास्तव में एक डीबगर संलग्न नहीं कर सकता और BOOT_COMPLETED के लिए प्रतीक्षा कर सकता हूं, और मैं नकली BOOT_COMPLETED प्रसारण नहीं भेज सकता।ब्रॉडकास्ट रिसीवर के लिए कोई टेस्ट इंस्ट्रूमेंटेशन क्यों नहीं है?

गतिविधि, सेवा और प्रदाता के लिए उपकरण कक्षाएं क्यों हैं, लेकिन ब्रॉडकास्ट रिसीवर नहीं? इसका परीक्षण करने के लिए कोई सलाह?

उत्तर

18

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

उदा।

public class TestMyBroadcastReceiver extends AndroidTestCase { 
    public void testReceive() { 
    MyBroadcastReceiver r = new MyBroadcastReceiver(); 
    Intent i = new Intent("MY_ACTION"); 
    // TODO put extras 
    r.onReceive(getContext(), i); 
    // TODO query application state to verify results 
    } 
} 
+0

सरल और काम करता है! – Robert

7

ज्यादातर मामलों के लिए मैं https://stackoverflow.com/a/5181010/527016

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

इस का हल बजाय InstrumentationTestCase से अपने परीक्षण उपवर्ग और onReceive पद्धति के रूप में एक ही थ्रेड पर चलते परीक्षण बनाने के लिए @UiThreadTest एनोटेशन का प्रयोग है।

अधिक जानकारी (और एक उदाहरण) के लिए देखें: http://olafurhelgason.blogspot.com/2012/12/threading-and-android-integration.html

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