अद्यतन: मैं छोड़कर समाप्त हो गया और इसके बजाय मेरे प्रोजेक्ट में 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");
साथ कोड की इन पंक्तियों त्रुटि दूर चला जाता है की जगह है, भले ही वर्ग अभी भी आयात किया जा रहा है।
किसी भी तरह से आप अपनी परियोजना को बंद कर सकते हैं और इसे ऑनलाइन पोस्ट कर सकते हैं? मैं एक त्वरित रूप से लेने के लिए तैयार होने से अधिक होगा। मैं कुछ समय पहले इसी तरह की समस्या से जूझ रहा था लेकिन मैंने जो भी किया वह बिल्कुल याद नहीं कर सकता। एक टूटी हुई परियोजना को देखते हुए मेरे मस्तिष्क को झुकाव में मदद मिल सकती है। –
मैं इसे अब गिटूब पर डाल रहा हूं ... एक टिक में पोस्ट करेगा। – d11wtq
यहां गुप्त कोड के रास्ते में वास्तव में बहुत कुछ नहीं है। यह मुश्किल से भी शुरू हुआ है;) http://github.com/d11wtq/Cioccolata – d11wtq