2010-05-19 10 views
5

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

अद्यतन: आप यहाँ Xcode प्रोजेक्ट डाउनलोड कर सकते हैं: http://github.com/d11wtq/Cioccolata

मैं अपने Xcode प्रोजेक्ट करने के लिए एक यूनिट टेस्ट लक्ष्य जोड़ दिया है, लेकिन यह कह रही है जब यह बनाता है मेरी ढांचे को खोजने के लिए विफल रहता है,:

Test.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.

मेरा ढांचा (मुख्य परियोजना लक्ष्य) को एम्बेडेड करने के लिए डिज़ाइन किया गया है और इसलिए @executable_path/../Frameworks का इंस्टॉल पथ है।

मैंने फ्रेमवर्क को परीक्षण लक्ष्य की प्रत्यक्ष निर्भरता के रूप में चिह्नित किया है और मैंने इसे "पुस्तकालयों के साथ लिंक बाइनरी" निर्माण चरण में जोड़ा है।

इसके अतिरिक्त मैंने "कॉपी फाइल" के पहले चरण (निर्भरता के निर्माण के बाद) जोड़ दिया है जो कि यूनिट टेस्ट बंडल की फ्रेमवर्क निर्देशिका में ढांचे की प्रतिलिपि बनाता है।

किसी को भी इस पर कोई अनुभव मिला है? मुझे यकीन नहीं है कि मैंने क्या याद किया है।

संपादित करें | मुझे पूरा यकीन है कि मुझे ऐसा नहीं माना जाता है, क्योंकि एक ढांचा निष्पादन योग्य नहीं है, लेकिन मैंने "टेस्ट होस्ट" और "बंडल लोडर" सेट नहीं किया है। यह (मेरी समझ में) सभी ठीक है क्योंकि परीक्षण बंडल ढांचे के खिलाफ जुड़ा हुआ है और इसे किसी भी अन्य बंडल की तरह लोड करेगा।

संपादित करें | मुझे लगता है कि मैं लगभग वहाँ हूँ। मैंने निम्न लेख पढ़ा है जो @executable_path की बजाय @rpath के उपयोग को निर्देशित करता है।

http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/

इस मामले में यह सही समझ में आता है के बाद से OCUnit परीक्षण बंडल एक निष्पादन योग्य नहीं है, यह एक सादे पुराने बंडल है, तो @executable_path संगत नहीं है। तो अब मेरे ढांचे में इसकी स्थापना निर्देशिका @rpath पर सेट है और परीक्षण लक्ष्य में इसके रनटाइम खोज पथ (आरपीएथ) को बिल्ड निर्देशिका के रूप में परिभाषित किया गया है। यह मुझे फ्रेम बंडल में ढांचे की प्रतिलिपि बनाने के लिए बचाता है और इसका मतलब है कि परिणामस्वरूप ढांचा प्रकृति में अधिक लचीला है क्योंकि यह कहीं भी रह सकता है।

अब, मैं भी महसूस करते हैं कि मैं चाहिए टेस्ट लक्ष्य पर बंडल लोडर की स्थापना की है, तो यह अब ढांचा द्विआधारी के पथ पर सेट किया जाता है।

मैं परीक्षण लक्ष्य बना सकता हूं और मैं ढांचे से कक्षाओं को मुक्त कर सकता हूं, त्रुटि मुक्त। लेकिन जैसे ही मैंने ढांचे मैं निम्नलिखित त्रुटि मिलती है से एक वर्ग का दृष्टांत का प्रयास करें:

/Developer/Tools/RunPlatformUnitTests.include:412: note: Started tests for architectures 'i386' /Developer/Tools/RunPlatformUnitTests.include:419: note: Running tests for architecture 'i386' (GC OFF) objc[50676]: GC: forcing GC OFF because OBJC_DISABLE_GC is set Test Suite '/Users/chris/Projects/Mac/Cioccolata/build/Debug/Test.octest(Tests)' started at 2010-05-21 12:53:00 +1000 Test Suite 'CTRequestTest' started at 2010-05-21 12:53:00 +1000 Test Case '-[CTRequestTest testNothing]' started. /Developer/Tools/RunPlatformUnitTests.include: line 415: 50676 Bus error "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}" /Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Developer/Tools/otest' exited abnormally with code 138 (it may have crashed). Command /bin/sh failed with exit code 1

मेरे परीक्षा पद्धति में कुछ भी नहीं और अधिक से अधिक का आवंटन और बाद में मैं इस स्थापना डिबग मदद करने के लिए बनाया गया एक HelloWorld वर्ग जारी करता है:

- (void)testNothing { 
    CTHelloWorld *h = [[CTHelloWorld alloc] init]; 
    [h release]; 
} 

अगर मैं एक STAssertTrue(YES, @"Testing nothing"); साथ कोड की इन पंक्तियों त्रुटि दूर चला जाता है की जगह है, भले ही वर्ग अभी भी आयात किया जा रहा है।

+0

किसी भी तरह से आप अपनी परियोजना को बंद कर सकते हैं और इसे ऑनलाइन पोस्ट कर सकते हैं? मैं एक त्वरित रूप से लेने के लिए तैयार होने से अधिक होगा। मैं कुछ समय पहले इसी तरह की समस्या से जूझ रहा था लेकिन मैंने जो भी किया वह बिल्कुल याद नहीं कर सकता। एक टूटी हुई परियोजना को देखते हुए मेरे मस्तिष्क को झुकाव में मदद मिल सकती है। –

+0

मैं इसे अब गिटूब पर डाल रहा हूं ... एक टिक में पोस्ट करेगा। – d11wtq

+0

यहां गुप्त कोड के रास्ते में वास्तव में बहुत कुछ नहीं है। यह मुश्किल से भी शुरू हुआ है;) http://github.com/d11wtq/Cioccolata – d11wtq

उत्तर

4

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

यह भी सुंदर है। ऐप्पल को इसे सेनटेस्टिंगकिट आईएमएचओ के बजाय एक्सकोड के साथ भेजना चाहिए।

+1

विजुअल स्टूडियो + रीशेर्पर दुनिया से आ रहा है, जीएचयूनीट डॉक्टर द्वारा आदेश दिया गया है। हमें यह बात करनी है ... टीडीडी चिकित्सकों को सीएनटेस्टिंग सामान के साथ जिस तरह से यह एक्सकोड के साथ पैक किया गया है, इस पर जाने के लिए क्रूर लगता है। – Hugh

1

आपको निम्नलिखित article के साथ कुछ भाग्य हो सकता है, विशेष रूप से DYLD_FRAMEWORK_PATH और DYLD_LIBRARY_PATH को आपके निष्पादन योग्य में मदद कर सकता है।

+0

हाय, लिंक के लिए धन्यवाद। मैंने परीक्षण सेटिंग्स के लिए बिल्ड कॉन्फ़िगरेशन में इन सेटिंग्स को जोड़ने का प्रयास किया लेकिन मुझे अभी भी वही समस्या मिलती है। हममम। – d11wtq

2

यह मेरे साथ कुछ बार हुआ। मुझे पता है कि आपने GHUnit पर स्विच किया है, लेकिन अगर कोई दिलचस्पी लेता है: लंबे समय तक इस के आसपास जाने के बाद मुझे एहसास हुआ कि एक्सकोड ने लक्ष्य के संकलन भाग में कोड क्लासेस (.m फाइल) नहीं जोड़ा है, लेकिन लक्ष्य के कॉपी संसाधन भाग। इसे सही जगह पर ले जाने से इस मुद्दे को हल किया गया।

1

ठीक है, तो मैं भी इस के साथ लड़ा, और यहाँ है कि मैं क्या समस्या का सरल समाधान हो पाया है:

  1. आपके आवेदन/ढांचा बनाएं
  2. अपने परीक्षण बंडल बनाएं "अतिरिक्त लक्ष्य संकलन अपने परीक्षण बंडल लक्ष्य के स्रोतों "
  3. अपने परीक्षण मामलों बनाएँ", फ़ाइलें आप के लिए अपनी कक्षाओं से परीक्षण करना चाहते हैं अपने मुख्य
  4. खींचें पर निर्भरता निर्धारित नहीं करते हैं ", उन्हें केवल परीक्षण बंडल लक्ष्य को जोड़ने
  5. संकलन परीक्षण लक्ष्य, परीक्षण चलाएं।

नोट, इसका मतलब है कि आप अपने परीक्षणों को चलाने के लिए बस अपने परीक्षण बंडल लक्ष्य को संकलित करना होगा। आदर्श, नहीं; काम करता है, हाँ।

ऐप्पल वास्तव में इसे स्वचालित करता है और बॉक्स के बाहर इसे सही तरीके से काम करता है।

0

मैं जीएचयूनीट के लिए सिफारिशों से सहमत हूं, यह पूरी तरह से चट्टानों!

हालांकि, ऐप्पल ने इसे xCode4 में एकीकृत करने के बाद ओसीटीएस्ट का उपयोग करने के लिए स्विच किया है, इसलिए मैं मुद्दों के माध्यम से उलझ रहा हूं।

इस परियोजना में नई फाइलें जोड़ने के बाद यहां दी गई लिंकिंग समस्या मेरे लिए आई। इनमें व्यू कंट्रोलर और xibs शामिल थे लेकिन फ़ाइलों को एप्लिकेशन और परीक्षण लक्ष्य दोनों के लिए एक्सकोड में चिह्नित किया गया था। मैंने व्युत्पन्न डेटा निर्देशिका में ओसीटीएस्ट बंडल का निरीक्षण करके फ़ाइलों की खोज की। ~/लाइब्रेरी/डेवलपर/एक्सकोड/व्युत्पन्न डेटा/राइट क्लिक करें और खोजक से "पैकेज सामग्री दिखाएं" चुनें। सामानों की तलाश करें जो वहां नहीं हैं, यानी: आवेदन कक्षाएं और संसाधन। इन फ़ाइलों को "संकलित स्रोत" या "कॉपी बंडल संसाधन" से हटाकर लिंकिंग त्रुटि को सही किया गया है।

3

मुझे एक ही समस्या थी लेकिन किवी यूनिट परीक्षण ढांचे के साथ। मेरी समस्या यह थी कि "टेस्ट होस्ट" बिल्ड सेटिंग्स के तहत सेट नहीं किया गया था। जब मैं इसे $ (BUNDLE_LOADER) पर सेट करता हूं तो सब कुछ पूरी तरह से काम करता है। एक्सकोड 4.5.2 आईओएस एसडीके 6.0 का उपयोग कर सत्यापित किया गया।

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