2009-07-07 27 views
26

मैं आईफोन के लिए यूनिट परीक्षण लिखने पर ऐप्पल के दस्तावेज का पालन कर रहा हूं, और बॉक्स के बाहर, दिनचर्या काम नहीं कर रही है। मुझे यकीन नहीं है कि मैं समझता हूं कि इकाई परीक्षण आवेदन प्रतिनिधि के संदर्भ में कहां जा रहा है।आईफोन - तार्किक इकाई परीक्षणों के लिए संसाधनों को पुनर्प्राप्त करना

मेरे निर्भरता निम्नलिखित की तरह कर रहे हैं: My_Program_target -> UnitTesting_target -> UnitTests_bundle

निम्नलिखित कोड का टुकड़ा जहां ज़ोर विफल रहता है। मैं CPPUNIT से बहुत परिचित हूं, लेकिन मुझे यह समझने में परेशानी हो रही है कि यह कैसे पार हो जाता है।

- (void) testAppDelegate { 

    id yourApplicationDelegate = [[UIApplication sharedApplication] delegate]; 
    STAssertNotNil(yourApplicationDelegate, @"UIAppliation failed to find the AppDelegate"); 

} 
इसके अतिरिक्त

:

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

NSLog(@"BundlePaths: %@", [NSBundle allBundles]); 
    NSString * path = [[NSBundle bundleWithPath:@"$(TARGET_BUILD_DIR)"] pathForResource:@"SimpleTestList" ofType:@"plist"]; 
    STAssertNotNil(path, @"Bundle Location couldn't find the file specified"); 

अनिवार्य रूप से, रास्ते पर ज़ोर सफल नहीं है, लेकिन मैं मुझे यकीन नहीं है कि मेरे यूनिटटेस्ट बंडल को संदर्भित करने के लिए पथ या निर्देशिका को क्या रखा जाए, जिसे मैंने बंडल संसाधनों की प्रतिलिपि बनाने के लिए कहा है। कॉलिंग [एनएसबंडल मेनबंडल] या तो काम नहीं करता है।

+0

गैरी के समाधान का निर्माण, मैं निम्नलिखित के साथ आया [एक्सकोड: टेस्ट बनाम डेब्यूग प्रीप्रोसेसर मैक्रोज़] (http://stackoverflow.com/questions/6748087/xcode-test-vs-debug-preprocessor-macros/6763597 # 6,763,597)। – ma11hew28

उत्तर

70

ठीक है, तो मैंने इसे समझ लिया है।

NSString * filePath = [[NSBundle bundleForClass:[self class] ] pathForResource:@"SimpleTestList" ofType:@"plist"]; 

आप एक वर्ग है कि आपके इकाई परीक्षण बंडल के रूप में संकलित है में इस शामिल करते हैं, उस वर्ग होगा: एक इकाई परीक्षण में एक फ़ाइल को खोलने के लिए, आप के रूप में खोलने के लिए फ़ाइल का उल्लेख करना होगा फ़ाइल SimpleTestList.plist फ़ाइल के लिए इकाई परीक्षण बंडल के अंदर देखो।

एक यूनिट परीक्षण के लिए, बस सुनिश्चित करें कि आप अपने यूनिट टेस्ट बंडल में अपनी प्लिस्ट को शामिल करने के लिए "कॉपी बंडल संसाधन" सेट अप करें।

+0

यह बिल्कुल मेरी समस्या भी थी। इसे पोस्ट करने के लिए धन्यवाद! – kubi

+0

कोई समस्या नहीं! खुशी हुई यह मदद की! =) – Gary

+0

इसके अलावा, अगर किसी के भी आश्चर्य की बात है, तो मैं प्रबंधित लिंक ऑब्जेक्ट मॉडल के संबंध में भी इस लिंक में आया था। समान स्थिति। http://www.spacevatican.org/2009/9/10/unit-testing-core-data-iphone-apps – Gary

3

यदि आपको एप्लिकेशन प्रतिनिधि की आवश्यकता है, तो आपको डिवाइस पर यूनिट परीक्षण चलाने होंगे, सिम्युलेटर नहीं। साथ ही, आप कंसोल में इकाई परीक्षण आउटपुट दिखाई देंगे, न कि निर्माण परिणामों में।

यह जानना महत्वपूर्ण बात यह है कि दो प्रकार के यूनिट परीक्षण होते हैं - तर्क परीक्षण जो निष्पादन योग्य के बाहर चलाए जाते हैं, और फिर एकीकृत सिस्टम प्रकार के परीक्षण जिन्हें पूर्ण चलने वाले वातावरण की आवश्यकता होती है।

तर्क परीक्षण लक्ष्य के रूप में चुने गए सिम्युलेटर के साथ चलाना चाहिए या वे नहीं चलेंगे।

एकीकृत सिस्टम परीक्षण डिवाइस पर निष्पादन योग्य के हिस्से के रूप में चलाना आवश्यक है - आप इसे पूरा करने के लिए एक नया लक्ष्य चाहते हैं।

क्षमा करें यह सब इतना जटिल है, यह पहलू कई अन्य यूनिट परीक्षण ढांचे की तुलना में प्रगति पर अभी भी बहुत अधिक काम है।

+0

हम्म, आवेदन प्रतिनिधि होने के बाद शायद मैं जो कर रहा हूं उसके लिए आवश्यक नहीं होगा। जो मैं इस समय पूरा करने की कोशिश कर रहा हूं वह मेरे मॉडल का परीक्षण है। नवीनतम डेकिट रिलीज में ओसीयूनीट से पहले, मैंने अपने आवेदन के भीतर व्युत्पन्न कक्षा में अपना परीक्षण किया था। मैं उस व्युत्पन्न वर्ग को तुरंत चालू कर दूंगा, और यह उपयोगकर्ता को देखे जाने वाले दृश्य को प्रदर्शित करने और प्रदर्शित करने से पहले अलग थ्रेड में स्वयं परीक्षण करेगा। मैं उस इकाई परीक्षण में कारक बनाने की कोशिश कर रहा हूं जहां यह संबंधित है। मेरी वर्तमान समस्या यह है कि मुझे प्लेलिस्ट फ़ाइल देखने के लिए ओसीयूनीट परीक्षण प्राप्त करने में समस्याएं आ रही हैं, यहां तक ​​कि यह बंडल में भी है। – Gary

+0

... वास्तव में "बंडल में" से, मेरा मतलब है कि मैंने इसे उस प्रतिलिपि फ़ोल्डर में बंडल में जोड़ा। – Gary

0

गैरी के जवाब की स्विफ्ट 3 अनुवाद ऊपर (एक स्ट्रिंग पथ के बजाय एक URL का उपयोग) है:

let url = Bundle(for: type(of: self)).url(forResource: "SimpleTestList", withExtension: "plist") 

सूचना महत्वपूर्ण तथा ग़ैर-स्पष्ट हिस्सा type(of: self) बजाय[self class]

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