2015-11-17 17 views
19

में UI परीक्षणों में अनुप्रयोग मॉड्यूल तक पहुंचने पर लिंकर त्रुटि मेरी परियोजना में कुछ UI परीक्षणों को लागू करने का प्रयास कर रहा हूं। जब तक मैं इसे सरल रखता हूं तब तक सब ठीक हो जाता है: परीक्षण केस रिकॉर्ड करें, कुछ आवेषण जोड़ें, फिर परीक्षण चलाएं। यह ठीक काम करता है, लेकिन जब मैं अपने परीक्षण के अंदर से आवेदन मॉड्यूल तक पहुँचने का प्रयास, लिंकर (नीचे देखें) एक त्रुटि फेंकता है:XCode 7.1

आवेदन स्रोत फ़ाइल में:

func foo() { 
    assert(true) 
} 

में यूआई परीक्षण:

import XCTest 
@testable import MyApp 

func testExample() { 
    foo() 
} 

त्रुटि:

Undefined symbols for architecture i386: "MyApp.foo() ->()", referenced from: MyAppUITests.MyAppUITests.testExample (MyAppUITests.MyAppUITests)() ->() in MyAppUITests.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Undefined symbols for architecture x86_64: "MyApp.foo() ->()", referenced from: MyAppUITests.MyAppUITests.testExample (MyAppUITests.MyAppUITests)() ->() in MyAppUITests.o ld: symbol(s) not found for architecture x86_64

मेरे पास यहां रिपोर्ट की गई एक समान समस्या है: https://forums.developer.apple.com/thread/20609 लेकिन कोई समाधान नहीं। मुझे लगता है कि @testable बस सही ढंग से काम नहीं करता है। Developer.apple.com पर लड़के ने सेटिंग्स में टेस्ट होस्ट और बंडल लोडर जोड़कर काम करने की कोशिश की, लेकिन मुझे नहीं लगता कि यह सही दृष्टिकोण है। मुझे लगता है कि @testable सिर्फ सब कुछ काम करना चाहिए, और यह इस समय ऐसा नहीं दिखता है। किसी भी मदद की सराहना की!

+0

आपको अपने यूआईटीस्ट्स से इस तरह के एप्लिकेशन मॉड्यूल तक नहीं पहुंचना चाहिए .... लेकिन यदि आप वास्तव में चाहते हैं (कृपया नहीं) तो आप फ़ाइल इंस्पेक्टर में लक्षित सदस्य जहाज के लिए बॉक्स को चेक कर सकते हैं। मुझे लगता है कि 'testable' UITests में काम नहीं करता है, cuz आपको इस तरह के कच्चे कार्यों तक नहीं पहुंचना चाहिए। – JMFR

+2

@ जेएमएफआर क्या आप विस्तारित कर सकते हैं क्यों नहीं? मेरे लिए यह एक बिल्कुल सही परिदृश्य है, खासकर यदि आपके पास कुछ परीक्षण चर या आपके परीक्षणों में जांच करने के तरीके हैं।लक्ष्य सदस्यता की जांच करने के आपके सुझाव के लिए, यह वही है जो मैं '@ testable' का उपयोग करके टालना चाहता था। – lawicko

उत्तर

3

यूआई परीक्षण ऐप से एक अलग मॉड्यूल हैं, इसलिए लॉजिक टेस्ट के रूप में आपके ऐप के अंदर नहीं चलते हैं। कोड साझा करने का एकमात्र तरीका उन सभी ऐप फ़ाइलों में संकलित करना है जिन्हें आपको दो मॉड्यूल के बीच साझा करने की आवश्यकता है। , आप देखेंगे कि कैसे प्राप्त कर सकते हैं के लिए इस ब्लॉग की जाँच करें https://www.bignerdranch.com/blog/ui-testing-in-xcode-7-part-1-ui-testing-gotchas/

इसके अलावा एक रडार यहां दायर की, पाया https://openradar.appspot.com/23116258

28

@testable import MainModule यूआई परीक्षण के लिए काम नहीं करेगा, हालांकि यह (कोड पूरा होने के लिए सक्षम होगा आप यह काम करता है महसूस कर सकते हैं)। यह अभी तक यूनिट परीक्षण के लिए डिज़ाइन किया गया है। और यह विफलता, की तरह कुछ का निर्माण करने के लिए नेतृत्व करेंगे:

ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

समाधान के रूप में अच्छी तरह से यूआई परीक्षण लक्षित करने के लिए स्रोत कोड फ़ाइल जोड़ने के लिए है, तो यह (यहां तक ​​कि @testable import के बिना) बॉक्स से बाहर काम करेंगे।

फ़ाइल इंस्पेक्टर ->लक्ष्य सदस्यता -> (मुख्य लक्ष्य के अतिरिक्त) यूआई परीक्षण लक्ष्य जाँच

आशा एप्पल इसे जल्द ही ठीक कर देंगे, ताकि हम इसका इस्तेमाल करने के एक क्लीनर तरीका हो सकता है ।

+0

दीवार के खिलाफ मेरे सिर को टक्कर देने के लगभग 2 घंटे बाद यह मुझे बचाया, धन्यवाद! – Josh

+0

@ जोश ने खुशी की मदद की :) –

0

@टेस्टेबल आयात वास्तव में इस बग का कारण बन सकता है। बस लाइन ले लो। यूआईटीस्ट्स के लिए इसकी आवश्यकता नहीं है।

6 मिनट में नोटिस, @टेस्टेबल का उपयोग ऐप्पल डेवलपर्स द्वारा नहीं किया जाता है। https://www.youtube.com/watch?v=7zMGf-0OnoU&t=1316s

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