2016-10-10 6 views
5

मेरे Cocoapod के lib परियोजना ट्रैविस पर इसके परीक्षण में विफल रहता है क्योंकि परीक्षण लक्ष्य पॉड के स्रोतों में से एक को खोजने में असमर्थ हो रहा है:ट्रैविस को मेरी हेडर फ़ाइल क्यों नहीं मिलती है? (जब एक ही अनुदेश अपने स्थानीय Xcode पर ठीक चलाता है)

'XYZMyClass.h' file not found 

मेरे विकास के वातावरण पर , मैं एक ही आदेश ट्रैविस सफलतापूर्वक चल रहा है चला सकते हैं और वातावरण में एक ही सेट कर रहे हैं:

  • छवि ट्रैविस के लिए osx_image: xcode8 है और मैं Xcode 8.0 का उपयोग स्थानीय स्तर पर और साथ ही
  • अनुदेश उस पर विफल रहता है ट्रैविस लेकिन रन सफलतापूर्वक स्थानीय रूप से निम्नलिखित है:

    set -o pipefail && xcodebuild -workspace Example/XYZMyPod.xcworkspace -scheme XYZMyPod-Example -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6s,OS=9.3' test | xcpretty 
    

भी weirder, 'XYZMyClass.h' मेरे स्रोत फ़ाइल आयात में 2 आयात है। पहला काम ठीक क्यों करता है? वे एक ही दृश्यता के साथ एक ही लक्ष्य से संबंधित हैं (Public)।

पीएस: स्रोत गिटहब here पर उपलब्ध है और ट्रैविस बिल्ड here है।

धन्यवाद!

उत्तर

1

समस्या के मूल को स्थापित फली पर अपने BSGMetrics.podspec

में निहित है, इन हेडर सार्वजनिक मिलती है:

s.public_header_files = [ 
    'BSGMetrics/Classes/BSGMetrics.h', 
    'BSGMetrics/Classes/BSGMetricsConfiguration.h', 
    'BSGMetrics/Classes/BSGMetricsEvent.h' 
    ] 

है यही कारण है कि अपने परीक्षण कक्षा में आप पहली बार आयात और करने में सक्षम नहीं देखने में सक्षम हैं दूसरा आयात देखें। परीक्षण लक्ष्य और अपने फली फली के रूप में स्थापित के साथ नमूना परियोजना के माध्यम से -

#import "BSGMetricsEvent.h" 
#import "BSGMetricsService.h" 

सेवा निजी हैडर करने का इरादा है, तो आप स्थापना इस तरह से यह परीक्षण करने के लिए सक्षम नहीं होगा।

इसके बजाय आप अपने फली फ़ाइलों परियोजना के मुख्य या परीक्षण लक्ष्य को जोड़ा गया है (और मैं परीक्षण, मुख्य नहीं सुझाव है) की आवश्यकता है।

चाल आप कैसे इकाई परीक्षण का इलाज है:

वैसे भी, सरल तरीके को यहाँ में s.public_header_files

संपादित करें (परीक्षण पर विवरण दृष्टिकोण) BSGMetricService बेनकाब करने के लिए है। "मॉड्यूल", एक ब्लैकबॉक्स के रूप में बीएसजी मेट्रिक्स के बारे में सोचें। इसमें कुछ "दृश्यमान" इंटरफ़ेस और कुछ छुपा कार्यान्वयन विवरण हैं। यह उद्देश्य-सी और स्विफ्ट दोनों के लिए सच है। अलग-अलग भाषा उपकरण आपके मॉड्यूल इकाइयों की दृश्यता को परिभाषित करने के लिए उपयोग किए जाते हैं। उद्देश्य-सी में यह हेडर फाइलें हैं। स्विफ्ट में यह (स्विफ्ट 3.0 से पहले) public, private, internal संशोधक

है तो जब तक आप परीक्षण के दौरान, आप नहीं एक्सेस कर पाएंगे/अपने कार्यान्वयन विवरण का परीक्षण किया जाएगा एक मॉड्यूल के रूप में अपने BSGMetrics का इलाज। आप केवल उपलब्ध इंटरफेस के माध्यम से इसका परीक्षण करने में सक्षम होंगे।

क्या यह बुरा या अच्छा है? वास्तव में, सब कुछ जो आपको चाहिए उस पर निर्भर करता है।हालांकि, अगर [BSGMetrics openWithConfiguration:] पर आपकी उम्मीद BSGMetricsService प्रारंभ करने के लिए है, तो आपको अपने परीक्षण के दायरे के लिए दृश्यमान होने के लिए BSGMetricsService की आवश्यकता है। और दो दृष्टिकोण हैं: मेक दृश्यमान है (जिस तरह से आपने अभी उपयोग किया है) या मॉड्यूल और टेस्ट के स्कोप मर्ज करें।

मैं थोड़ा सा वर्णन करूंगा कि मैं अपने पुस्तकालयों में से किसी एक का परीक्षण करने के लिए बाद के दृष्टिकोण को कैसे प्राप्त करता हूं।

पहला, परीक्षण लक्ष्य एक ही प्रोजेक्ट का हिस्सा है, जहां परीक्षण के तहत सभी फाइलें भी शामिल की जाती हैं।

दूसरा, मेजबान आवेदन के बिना परीक्षण केवल परीक्षण बंडल के अंदर किया जाता है। enter image description here

तीसरा, परीक्षण के तहत फाइलें परीक्षण लक्ष्य में संकलित करने के लिए भी जोड़े गए हैं।

इतनी लंबी कहानी, परीक्षण और कोड के तहत कोड एक ही मॉड्यूल में रहते हैं।

अधिक पढ़ने here

+0

पाया जा सकता है यह एक समाधान नहीं है, लेकिन वास्तव में मेरी समस्या का समाधान नहीं है। मेरी समझ से, स्विफ्ट इस परिदृश्य के लिए एक बेहतर प्रतिक्रिया प्रदान करता है, इसलिए मैं इसे बहुत ज्यादा नहीं लड़ूंगा और स्विफ्ट ASAP पर स्विच करने के लिए इसे एक और प्रोत्साहन के रूप में मानूंगा। धन्यवाद। :) –

+0

मुझे खुशी है कि आपका निर्माण अब काम कर रहा है। मैं किसी भी तरह से "स्विफ्ट में कुछ समस्या नहीं है" के बारे में आपसे असहमत हूं। मैं कुछ अतिरिक्त विचार देने के लिए जल्द ही परीक्षण करने के दृष्टिकोण पर कुछ विचारों को जोड़ने के लिए अपना प्रश्न संपादित करूंगा –

+0

@DirtyHenry मैंने एक उत्तर अपडेट किया है, उम्मीद है कि यह थोड़ा सा स्पष्ट होगा। –

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