2015-11-16 8 views
5

मैं आईओएस ऐप में अपने व्यू कंट्रोलर (UIViewController subclasses) का परीक्षण कैसे कर सकता हूं?मैं आईओएस दृश्य नियंत्रकों का परीक्षण कैसे करूं?

मैं पिछले कुछ दिनों से इस विषय को बड़े पैमाने पर गुगल रहा हूं लेकिन मुझे अभी भी यह समझ नहीं आ रहा है कि ऐसा करने का सही तरीका क्या है।

ऐसा लगता है वहाँ इकाई परीक्षण दृश्य नियंत्रक तर्क के कम से कम तीन तरीके हैं कि:

  • निजी कार्यों और IBOutlets कि आप इकाई परीक्षण (उनमें हेडर फाइल में घोषित) करना चाहते बताएं।

  • यूनिट परीक्षणों से निजी कार्यों और आईबीऑटलेट तक पहुंचने के लिए Tests जैसी श्रेणी का उपयोग करें।

  • शीर्षक का खुलासा न करें, शीर्षक या अन्य सार्वजनिक संपत्ति द्वारा बटन और अन्य विचारों को ढूंढें और सार्वजनिक UIView विधियों के माध्यम से उपयोगकर्ता इंटरैक्शन अनुकरण करें (उदाहरण के लिए उपयोगकर्ता को एक बटन टैप करने का अनुकरण करें); फिर दृश्य स्थिति का निरीक्षण करें।

    मुझे इस पर बहुत से स्रोत नहीं मिला, लेकिन objc.io पर एक उदाहरण है।

अब, ईमानदार होना, मैं नहीं वास्तव में पहले दो तरह क्योंकि जहाँ तक मैं समझता हूँ कि इकाई परीक्षण वस्तु की आंतरिक (यानी निजी विधि) का परीक्षण करने नहीं जा सकते, और उनके लिए सार्वजनिक घोषणा के केवल परीक्षणों के लिए सबसे अच्छा अभ्यास की तरह प्रतीत नहीं होता है। मैं आमतौर पर कार्यान्वयन के अंदर IBActions और IBOutlets रखता हूं लेकिन अब मुझे अचानक सब कुछ सार्वजनिक करना है क्योंकि मैं परीक्षण जोड़ रहा हूं ...

मुझे लगता है कि एक और विकल्प हो सकता है: जितना तर्क मैं अपने विचार से कर सकता हूं नियंत्रकों को स्वतंत्र घटकों में और इसके बजाय परीक्षण करें (नियंत्रकों को अनचाहे या अधिकतर अनचाहे छोड़कर)। यह एक अच्छा विचार प्रतीत होता है लेकिन मुझे बहुत से रिफैक्टरिंग करना होगा (मैं वर्तमान में एक परियोजना के लिए यूनिट परीक्षण जोड़ रहा हूं जिसे परीक्षण में ध्यान में नहीं रखा गया था)।

तो मैं सोच रहा था, दृश्य नियंत्रकों का परीक्षण करने का सबसे अच्छा तरीका क्या है?

उत्तर

4

यह प्रश्न मुख्य रूप से राय आधारित हो सकता है और बंद होना चाहिए लेकिन मैं अपनी कुछ राय पोस्ट करूंगा।

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

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

असली समाधान, जैसा कि आप पहले ही जानते हैं, कोड को दोबारा टेस्ट करने योग्य बनाने के लिए है। आदर्श रूप से, नियंत्रक बहुत छोटा होना चाहिए और केवल दृश्य और मॉडल के बीच बाध्यकारी के रूप में कार्य करता है। यदि आपके पास बहुत बड़ा नियंत्रक है, तो आपको मॉडल/मॉडल सहायक में मॉडल और व्यावसायिक तर्क देखने/देखने के लिए यूआई तर्क को दोबारा संशोधित करना चाहिए।

+0

श्रेणियों के माध्यम से आपको बटन और आईबीएक्शन का परीक्षण कैसे करना चाहिए? परीक्षण फ़ाइल में श्रेणी घोषित करें, फिर फ़ंक्शन, फिर इसे कॉल करें? फिर मैं सत्यापित कैसे करूं कि यूआई बदल गया है? – Minimi

+0

आपने आईबीएक्शन को श्रेणी में रखा ताकि आप उन्हें परीक्षण में कॉल कर सकें। यूआई को सत्यापित करने के लिए, आप या तो दृश्यों के फ्रेम की जांच कर सकते हैं, या स्क्रीनशॉट परीक्षण उपकरण का उपयोग कर सकते हैं जैसे https://github.com/facebook/ios-snapshot-test-case –

+0

क्या आईबीएक्शन का परीक्षण करने का कोई बेहतर तरीका है? मैं केवल परीक्षण मामलों के लिए अपने मॉडल में कोड जोड़ना नहीं चाहता, भले ही यह केवल एक श्रेणी है जो परीक्षण लक्ष्य में शामिल है। क्या मुझे यूनिट टेस्ट IBActions की कोशिश भी करनी चाहिए? क्या मुझे इसके बजाय यूआई परीक्षण का उपयोग करना चाहिए? – Minimi

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