2009-01-05 14 views
6

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

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

क्या निर्भरता स्थापित करने का कोई तरीका है ताकि मूल ऐप लक्ष्य में जोड़े गए प्रत्येक फ़ाइल को यूनिट परीक्षण लक्ष्य भी जोड़ा जा सके?

उत्तर

4

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

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

  1. के सबसे बाद से अपने मूल लक्ष्य के प्रति अपना सेटिंग्स वही होगी।
  2. अपने नए लक्ष्य का चयन करें और निरीक्षक (⌘I)
  3. खोलने प्रत्यक्ष निर्भरता के अंतर्गत, + बटन पर क्लिक करें और अपने मुख्य लक्ष्य चुनें।
  4. अतिरिक्त दस्तावेज/स्रोत/नियम या जो भी हो, वांछित के रूप में नया लक्ष्य सेट करें।

आप को खींचने और चारों ओर बातें छोड़ने पसंद करते हैं, तो आप भी अपने मूल लक्ष्य (लक्ष्य प्रकटीकरण त्रिकोण के नीचे से) अपने नए लक्ष्य में खींच सकते हैं और यह अपने आप निर्भरता स्थापित करेगा।

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

+1

इस बहुत उपयोगी उत्तर के लिए धन्यवाद एक टन! – thrusty

+0

ग्रेट उत्तर। मूल रूप से मैंने सोचा कि मैं अपने लिंक किए गए पुस्तकालयों को नए लक्ष्य से भी हटा सकता हूं, लेकिन कुछ 'गिट रीसेट' नहीं होगा - हार्ड 'ठीक नहीं होगा। –

0

कोई नहीं है। क्या आपके यूनिट टेस्ट लक्ष्य में प्रत्येक फ़ाइल को एक विशेष कारण है? इसमें main.m और सभी कक्षाएं शामिल होंगी जिन्हें आप परीक्षण नहीं कर रहे हैं (जैसे कि आपकी दृश्य कक्षाएं)। वास्तव में, यदि आपके यूनिट टेस्ट में main.m शामिल है, तो आपका यूनिट टेस्ट ठीक से कैसे चलाएगा?

+0

मुझे यह स्पष्ट करना चाहिए कि यह लक्ष्य कोड का परीक्षण करने के लिए है जो संपूर्ण ऐप संदर्भ उपलब्ध होने पर निर्भर है। (जैसे कि कुछ UIViewControllers।) जैसे कि यह एक यूआई परीक्षण ढांचे की तरह है, और चीजों को कवर करने के लिए है हमारे अन्य "हेडलेस" यूनिट परीक्षण कवर करने में असमर्थ हैं। – thrusty

+0

निश्चित रूप से, लक्ष्य एक-दूसरे की प्रत्यक्ष निर्भरता हो सकते हैं। –

0

मैंने अपने अधिकांश एप्लिकेशन को स्थिर पुस्तकालय के रूप में निर्माण करके समस्या हल की, जो कि ऐप और यूनिट परीक्षण लक्ष्यों दोनों से जुड़ा हुआ है।

अपने प्रोजेक्ट में लक्ष्य देखो की तरह:

  • libMyApp
    • फ़ाइलों
  • MyApp.app संकलन मीटर
    • libMyApp (निर्भरता)
    • पुस्तकालय के साथ लिंक: libMyApp.a
  • UITest.app
    • libMyApp (निर्भरता)
    • पुस्तकालय के साथ लिंक: libMyApp.a

इस तरह से मैं केवल करने के लिए "libMyApp" लक्ष्य .m फ़ाइलें जोड़ने और उन्हें हो सकता है ऐप और परीक्षण दोनों में उपलब्ध है, और उन्हें फिर से संकलित करने की भी आवश्यकता नहीं है।

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

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