2010-02-20 11 views
6

मैं परीक्षण में एक बड़ा आस्तिक हूं, लेकिन एक बहुत अच्छा व्यवसायी नहीं। मैंने अपने मॉडल ऑब्जेक्ट्स पर कवरेज प्राप्त करने और उन्हें टीडीडी शैली में प्रोग्रामिंग करने में बहुत अच्छा प्रदर्शन किया है। मैं वास्तव में इसका आनंद ले रहा हूं, मुझे इसे अपने नियंत्रक परत, विशेष रूप से मेरे UIViewController सबक्लास में विस्तारित करना अच्छा लगेगा।बिल्ड समय पर UIViewControllers का परीक्षण कैसे करें?

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

मेरा प्रश्न यह है कि: मैं UIViewController एस का परीक्षण कैसे करूं ताकि परीक्षण प्रत्येक निर्माण से पहले चलाया जा सके? मैं इस समस्या के कुछ अलग-अलग समाधानों से अवगत हूं, लेकिन प्रत्येक के विभिन्न लाभों के बारे में पूरी तरह से नहीं जानता।

उत्तर

2

इसलिए मैं इस स्थिति से नाखुश था क्योंकि यह खड़ा था, और डैनियल और एड के दोनों उत्तरों ने मुझे चीजों को और बेहतर बनाने के लिए प्रेरित किया। मैंने मामलों को अपने हाथों में लेने का फैसला किया।

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

मैंने स्रोत को Bitbucket और Github दोनों पर ऑनलाइन रखा है।

2

सामान्य रूप से यदि आप किसी पर्यावरणीय समस्या से फंस गए हैं जहां बिना शर्त परीक्षण असंभव प्रतीत होता है, तो आप इसके आसपास काम कर सकते हैं यदि लाभ कुछ हुप्स के माध्यम से आपके कूदने के लिए पर्याप्त हैं।

यहां स्थिति अवांछित बाहरी निर्भरताओं का एक विशेष मामला है, जिसे मैं आम तौर पर निर्भर करता हूं कि मैं अपने यूनिट परीक्षणों में या तो आश्रित कोड के छोटे बिट्स को परिभाषित करता हूं, या अपेक्षित निर्भरता भूमिकाओं को पूरा करने के लिए स्टब कक्षाओं को कार्यान्वित करके पर्याप्त करता हूं परीक्षण किया जा सकता है।

तो इस विशिष्ट मामले में, आप "UIKitStubClasses.m" नामक परीक्षण बंडल में केवल एक नई स्रोत फ़ाइल बना सकते हैं ... इसके भीतर आप UIViewController जैसे UIKit आश्रित वर्गों को अनुकरण करने के लिए जरूरी आवश्यकताओं को लागू कर सकते हैं, इसलिए कि आपके परीक्षण लिंक और पूरी तरह से अपने तर्क का प्रयोग करें।

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

+0

शायद यह है कि मैं क्या करूँगा, संभवतः। मुझे 'उइलाबेल' पता है और कुछ अन्य वर्ग यूनिट टेस्ट बंडल में चलते समय आवंटित करने में विफल रहते हैं, लेकिन उम्मीद है कि मैं इस काम को पूरा कर सकता हूं। –

2

आप युक्तियों का उपयोग नहीं किया जा सकता/क्रिस हैन्सन के ब्लॉग यहाँ तरीके: http://chanson.livejournal.com/120263.html

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

मैं मानता हूं कि यह सही नहीं हो सकता है, लेकिन ऐसा लगता है जैसे यह काम कर सकता है, और ऐसा लगता है कि यह स्वचालित हो सकता है।

+0

मैंने इसे आजमाया नहीं है, लेकिन जहां तक ​​मुझे पता है कि इस प्रकार का परीक्षण डिवाइस को छोड़कर आईफोन लक्ष्यों के लिए समर्थित नहीं है। हालांकि मैं इसे एक शॉट दूंगा। –

1

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

Get it on github.

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

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