XCTest के लिए अंतर्निहित मॉड्यूल लोड नहीं कर सकता


180

मैं Xcode पर तेजी से काम कर रहा हूं और डिफ़ॉल्ट रूप से यह एक परीक्षण फ़ाइल बनाता है जो XCTest का संदर्भ देता है।

जब मैं लक्ष्य सदस्यता को अपने मुख्य प्रोजेक्ट पर सेट करता हूं तो यह इस त्रुटि का कारण बनता है

XCTest के लिए अंतर्निहित मॉड्यूल लोड नहीं कर सकता

यदि यह लक्ष्य सदस्यता सेट नहीं है तो परीक्षण ठीक से चलता है और सब कुछ ठीक चलता है।

पुनश्च: मैं तेजी से नया हूँ और यह शायद एक गूंगा सवाल है (कृपया मुझे बताएं)


17
कोई गूंगा प्रश्न टिड्डी नहीं हैं, केवल गूंगा प्रश्नकर्ता हैं। ;-) महान सवाल यह है कि हर कोई जो इसे पढ़ता है, वही समस्या होगी।
लैंस काइंड

जवाबों:


168

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

  1. प्रोजेक्ट नेविगेटर में अपनी परियोजना का चयन करें। यह संपादक में प्रोजेक्ट की सेटिंग खोलेगा।
  2. अपने टारगेट को सूचीबद्ध करने वाले कॉलम के निचले भाग में "+" बटन पर क्लिक करें।

यहां छवि विवरण दर्ज करें

  1. यदि आप एक iOS प्रोजेक्ट टेम्पलेट पर काम कर रहे हैं , तो चुनेंiOS > Test > iOS Unit Testing Bundle

    यदि आप OS X प्रोजेक्ट टेम्पलेट पर काम कर रहे हैं , तो चयन करें OS X > Test > OS X Unit Testing Bundle


3
इस बीच iOS के लिए इसे iOS UITesting बंडल (UI टेस्ट के लिए उपयोग करें) या iOS यूनिट टेस्टिंग बंडल (यह यूनिट टेस्ट के लिए ...) कहा जाता है
kuzdu

184

डबल जांचें कि प्रश्न में फ़ाइल मुख्य लक्ष्य में नहीं है, बल्कि केवल परीक्षण लक्ष्य है। केवल परीक्षण लक्ष्य के लिए आयात करने की रूपरेखा होगी।


16
अगर यह मदद करता है। अपने 'नॉन टेस्ट' टारगेट का चयन करें -> बिल्ड चरणों -> संकलित स्रोत। सुनिश्चित करें कि आपका "ClassTest.swift" सामान्य बिल्ड लक्ष्य में नहीं है।
निक एन

और अगर यह मुख्य बंडल में है और परीक्षण बंडल है तो आप इसे मुख्य बंडल से कैसे निकालते हैं।
जेम्स रॉबिन्सन

1
धन्यवाद @NickN, आपने सटीक मुद्दा बताया था जो मैं कर रहा था और अब यह तय हो गया है!
नौशता

यदि इसका परीक्षण लक्ष्य पर है तो मैं अपने मुख्य लक्ष्य में अपने किसी भी मुख्य परीक्षण के तरीके का उपयोग नहीं कर सकता।
UKDataGeek

धन्यवाद यह एक आकर्षण की तरह काम किया। बस परीक्षण फ़ाइलों को हटाने काम किया।
Ccr

32

आपने अपनी परीक्षण फ़ाइल / कक्षा को मुख्य लक्ष्य में जोड़ा है न कि गलती से परीक्षण लक्ष्य में। इतना ही आसान।

उपाय:

1) मुख्य लक्ष्य के लिए "बिल्ड चरणों" टैब पर "संकलित स्रोत" सूची से परीक्षण फ़ाइल निकालें

2) परीक्षण लक्ष्य के लिए "बिल्ड चरणों" टैब पर एक ही फ़ाइल को "संकलित स्रोत" में जोड़ें

यह समस्या को हल करना चाहिए


15

मुझे यह त्रुटि मिलती है अगर मैं एक macOS डायनामिक फ्रेमवर्क लक्ष्य बनाता हूं, जो लिंक करता है XCTest.framework (लक्ष्य एक फ्रेमवर्क लक्ष्य है, परीक्षण लक्ष्य नहीं!)।

इस स्थिति में समस्या को जोड़कर हल किया जाता है

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks

परियोजना के "निर्माण सेटिंग्स / फ्रेमवर्क खोज पथ"।


उत्तम! धन्यवाद!
लांस

9
बेहतर: $(PLATFORM_DIR)/Developer/Library/Frameworksयदि आपके पास विभिन्न नामों (जैसे रिलीज़ और बीटा संस्करण) के तहत स्थापित Xcode के कई संस्करण हैं।
रॉ मय

धन्यवाद @robmayoff यह सही समाधान था ;-)
ओलिवर

परीक्षण समर्थन के लिए एक रूपरेखा का निर्माण करते समय यह सही उत्तर है।
डैनियल वुड

7

ढेर सारी समस्याएँ और इस तरह के एक के रूप में ढेर अतिप्रवाह पृष्ठों के आसपास उछलने के बाद, मैं अन्य iOS यूनिट टेस्ट समस्या निवारण पृष्ठों पर उल्लेख नहीं किया गया एक विवरण खोजने में कामयाब रहा।

यदि आपकी परियोजना कोकोआपोड्स का उपयोग करती है, तो अपने मुख्य लक्ष्य के लक्ष्य के अंदर अपने परीक्षण लक्ष्य को शामिल करना सुनिश्चित करें। यदि आपने दौड़ने के बाद अपना परीक्षण लक्ष्य बनाया है तो आपका पॉडफाइल इसमें शामिल नहीं हो सकता है pod init। आपका पॉडफाइल कुछ इस तरह दिखना चाहिए:

target 'YourApp' do
    target 'YourAppTests' do
        inherit! :search_paths
        # Pods for testing
    end
end

अपने पॉडफिल को बचाने और चलाने के लिए याद रखें pod install ऐसा करने के बाद ।

आशा करता हूँ की ये काम करेगा!


5

यह शायद थोड़ी देर हो सकती है लेकिन आपको क्या करना है:

फ़ाइल> नया> लक्ष्य> iOS यूनिट परीक्षण बंडल पर क्लिक करें।

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


2

यह समस्या आपके प्रोजेक्ट में दो बार आती है।

  1. जब आप एक नया प्रोजेक्ट बनाते समय अपने प्रोजेक्ट में UnitTestingBundle नहीं जोड़ते हैं।
  2. जब आप अपने प्रोजेक्ट में CocoaPods स्थापित करते हैं, तो हर बार नहीं।

1: उत्तर:

  • फाइल पर जाएं फाइल पर क्लिक करें।

  • फिर आपको First Option New Click on दिखाई दे रहा है।

  • इस पर क्लिक करने के बाद आपको कुछ विकल्प दिखाई देते हैं, लक्ष्य पर क्लिक करें।

  • और फिर सर्चबार सर्च IOS यूनिट टेस्टिंग बंडल में और Add Problem को हल किया जाता है।

  • यदि कंपाइलर आपको इसे जोड़ने की अनुमति नहीं दे सकता है तो नीचे दिया गया दूसरा तरीका आज़माएं।

2. उत्तर कोकोआ समस्या:

  • उत्पाद पर जाएं उत्पाद पर क्लिक करें।

  • स्वच्छ या प्रेस cmd + k पर क्लिक करें।

  • समस्या हल हो गई है।


2

जबकि स्वीकृत उत्तर इस समस्या को कई बार हल करता है, एक और तरीका है जिससे आप इस त्रुटि के पार आ सकते हैं।

यदि आपने पहले ही सुनिश्चित कर लिया है कि:

जैसा कि @pwc @ nick-n और अन्य द्वारा बताया गया है

  1. यह ClassTest.swiftसुनिश्चित करने के लिए लक्ष्य सदस्यता की फ़ाइल कि वह केवल परीक्षण लक्ष्य से जुड़ी है।
  2. ClassTest.swiftहै नहीं के तहत आप मुख्य अनुप्रयोग लक्ष्य> स्रोत बिल्ड> संकलित सूत्रों का कहना है दिखाई

यहाँ आप और क्या देख सकते हैं:

आपकी .podspecsफ़ाइल में

सुनिश्चित करें कि आपकी source_filesप्रत्यक्ष या अप्रत्यक्ष रूप से परीक्षण निर्देशिका शामिल नहीं है।

उदाहरण के लिए :

s.source_files = ["Classes/**/*.{swift}", "Classes/**/*.{xib}"]
s.exclude_files = ["Classes/Exclude", "Classes/MyPodProjTests/"]

ध्यान दें कि Classes/**/*.{swift}इस तथ्य को शामिल करने में सब कुछ शामिल है कि निर्देशिका MyPodProjTestsको बाहर रखा जाना चाहिए।

उपाय:

s.source_files = ["Classes/MyPodProj/**/*.{swift}", "Classes/**/*.{xib}"]

नोट: यह बहुत ही धार वाला मामला है और पूरी तरह से मानवीय त्रुटि है लेकिन मुझे लगा कि यह ध्यान देने योग्य होगा।


उत्कृष्ट टिप्पणी, मैंने अपना सब कुछ शामिल कर लिया था s.source_files। धन्यवाद!
मौरिसियो चिरिनो

1

सुनिश्चित करें कि जब परीक्षण ढांचे का चयन किया जाता है तो सभी मॉड्यूल के लिए लक्ष्य सदस्यता की जाँच की जाती है। आप व्यू-> यूटिलिटीज-> शो फाइल इंस्पेक्टर का चयन करके लक्ष्य सदस्यता विकल्प देख सकते हैं


1

मेरे मामले में, मैं एक निजी पॉड के लिए परीक्षण कर रहा था, इसलिए पॉडस्पेक में ऐसा था:

s.test_spec 'Tests' do |test_spec|
test_spec.source_files = 'Tests/*.swift' end

लेकिन पॉडफाइल में मैं परीक्षण विनिर्देश लाना भूल गया, जैसे:

target 'MyApp' do
use_frameworks!
pod 'CoconutLib', '~> 1.0', :testspecs => ['Tests'] end

0

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


0

मेरे पास एक ही समस्या थी और मेरे लिए समाधान था:

  1. मेरी योजना का चयन करें
  2. योजना संपादित करें ...
  3. फिर जब योजना कॉन्फ़िगरेशन विंडो खोली जाती है, तो "टेस्ट" नामक बाएं टैब का चयन यहां पुनर्निर्देशित किया जाएगा: यहां छवि विवरण दर्ज करें
  4. जैसे आप देख सकते हैं कि मेरे UITests यहाँ जोड़े नहीं गए हैं, लेकिन मेरी परियोजना में मौजूद हैं इसलिए मुझे सिर्फ प्लस बटन पर टैप करना था और इस तरह से मेरे UITests लक्ष्य का चयन करना था: यहां छवि विवरण दर्ज करें
  5. फिर "जोड़ें" बटन पर टैप करें और कॉन्फ़िगरेशन देखें
  6. प्रोजेक्ट की साफ-सफाई के साथ खत्म करें और फिर से कोशिश करें कि यह काम करे
  7. और इसे भी सत्यापित करना न भूलें: https://developer.apple.com/library/archive/qa/qa1954/_index.html

आशा है कि यह उत्तर मदद करेगा।

पुनश्च: निर्माण सेटिंग्स में अपने अंतिम लक्ष्य में एक अंतिम विचार मुझे इन संपत्तियों की जांच करना था जो सही तरीके से कॉन्फ़िगर नहीं किए गए थे:

DEBUG_INFORMATION_FORMAT = dwarf; 
ONLY_ACTIVE_ARCH = YES;
VALIDATE_PRODUCT = NO;

0

जैसा कि ऊपर उल्लिखित @Alfishe:

आपको परीक्षण फ़ाइलों को निकालना होगा Compiler Sources नीचेBuild Phases

जैसा की नीचे दिखाया गया


यहां छवि विवरण दर्ज करें


1
यदि आप ऐसा करते हैं कि आप परीक्षणों को निष्पादित नहीं कर सकते हैं, तो जहाँ तक मुझे पता है
जुआन कर्टि


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.