2012-11-16 14 views
6

परिदृश्य:एंडिनकटास्क और यूआई अपडेट समाधान के साथ एंड्रॉइड यूनिट परीक्षण

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

विवरण:

Onclick एक AsyncTask कार्यान्वित करता है, doInBackground REST API क्वेरी और परिणाम देता है। OnPostExecute परिणाम लेता है और डेटा के साथ ListView में एक नया ListAdapter असाइन करता है।

समस्या:

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

क्या यूनिट अपडेट करने के लिए यूनिसेकटास्क का परीक्षण करने का कोई अच्छा समाधान है? या एक और टेस्टेबल डिजाइन जिसे मैं कार्यान्वित कर सकता हूं?

+0

यह एक गतिविधिInstrumentationTestCase की तरह लगता है ... – dmon

+0

यह एक गतिविधिInstrumentationTestCase2 कक्षा में किया जा रहा है। – bcdennis72

+0

आपका asynctask ठीक चलाना चाहिए ... – dmon

उत्तर

0

ठीक परीक्षण चलाना चाहते हैं, तो समाधान मैं के साथ आया था यह है:

1.) पूर्व & पद की घटनाओं के लिए एक श्रोता इंटरफेस को परिभाषित करें।
2.) गतिविधि
पर श्रोता लागू करें 2.) एक कार्यकर्ता वर्ग को परिभाषित करें जो श्रोता को स्वीकार करता है और जिसमें 'exec' पर एक आंतरिक AsyncTask कहा जाता है।
3.) आंतरिक AsyncTask श्रोता को ऑनएरएक्सक्यूट और ऑनपोस्टेक्स्यूट
पर सूचित करता है 4.) अधिसूचना पर, गतिविधि अद्यतन यूआई है।

गतिविधि में परीक्षण के लिए:
1.) यह से इनहेरिट, तो अनुक्रम में निष्पादित करने के लिए कार्यकारी विधि अधिभावी द्वारा आवरण वर्ग के एक धारावाहिक संस्करण बनाएँ:
- के रूप में शुरू श्रोता को सूचित कार्य।
- कार्य निष्पादित करें।
- श्रोता को सूचित करें कि कार्य पूरा हो गया है।

कार्य के असीमित संस्करण का परीक्षण करने के लिए।
1.) यूनिट परीक्षण विधि में एक उलटी गिनती और रननेबल का उपयोग करें। चूंकि वहां कोई UI अपडेट आवश्यक नहीं है, तो आपके पास कोई WrongThreadExceptions नहीं होगा।

+0

आप शायद इसी तरह की चर्चा पर दिलचस्प हैं [यहां] (http://stackoverflow.com/questions/10491526/how-can-i-test-the -result-of-a-button-click-that-change-the-activitys-view-asy/10491965 # 10491965) और [यहां] (http://stackoverflow.com/questions/8295003/best-way-to- प्रबंधन-progressdialog-से-asynctask/8317071 # 8317071)। – yorkw

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