2011-03-28 15 views
12

के लिए मैं XCode 4 में यूनिट टेस्टिंग के साथ एक नया कोको टच स्टेटिक लाइब्रेरी प्रोजेक्ट बनाया और एक वर्ग कहा:न पहचाना गया चयनकर्ता SenTestCase श्रेणी

// NSString+Inflections.h 
@interface NSString (Inflections) 
- (NSString *)pluralize; 
@end 

// NSString+Inflections.m 
@implementation NSString (Inflections) 
- (NSString *)pluralize { return self; } 
@end 

फिर मेरे परीक्षण मामलों के लिए उपयुक्त इंपोर्ट स्टेटमेंट जोड़ा गया है और निम्न परीक्षण लिखा था :

- (void)testPluralize 
{ 
    NSString *test = @"person"; 
    NSString *expected = @"people"; 

    NSString *actual = [test pluralize]; 

    STAssertEqualObjects(actual, expected, @"Whoops"); 
} 

बहरहाल, यह (असफल नहीं) के साथ 'गैर मान्यता चयनकर्ता उदाहरण के लिए भेजा' दुर्घटना मेरी परीक्षण का कारण बनता है।

मैं पुस्तकालय के अंदर एक श्रेणी का परीक्षण कैसे कर सकता हूं?

यदि मेरा विवरण अपर्याप्त है तो मैंने पूरी परियोजना here संपीड़ित और अपलोड की है।

उत्तर

18

मैं इस समस्या का उत्तर खोज रहा था और पाया (मुझे विश्वास है) एक सरल समाधान है, जिसे संकलन स्रोत सूची में कोई संदर्भ जोड़ने की आवश्यकता नहीं है जब भी परियोजना में कोई नई श्रेणी कक्षा शामिल की जाती है।

परीक्षण लक्ष्य की बिल्ड सेटिंग्स में, लिंकिंग/अन्य लिंकर ध्वज मूल्य में -ObjC जोड़ें।क्यों इस त्रुटि वास्तव में होता है के लिए

आगे स्पष्टीकरण Apple Reference में पाया जा सकता।

+0

यह स्वीकार्य उत्तर होना चाहिए। कभी-कभी मैं चाहता हूं कि मैं एक से अधिक बार उभारा। –

+0

@Shaggy क्षमा करें मैंने जवाब नहीं बदला। मैं बस इस समस्या में फिर से भाग गया और यह एक बहुत बेहतर फिक्स है। –

+0

मेरे लिए काम नहीं :(मैं स्थिर पुस्तकालय है इकाई परीक्षण लिखने के लिए की जरूरत है। कोड संकलन और सफलतापूर्वक निर्माण लेकिन परीक्षण का मामला गैर मान्यता प्राप्त चयनकर्ता असफल। जब मैं परीक्षण लक्ष्य –

13

संपादित करें: के बारे में इकाई परीक्षण परियोजना अपलोड करने के लिए फ़ाइलों

+1 नहीं मिल this answer को देखने के लिए सुनिश्चित करें। समस्या यह है कि आपके परीक्षण लक्ष्य में बिल्ड चरणों में NSString + Inflections.m शामिल नहीं है।

XCode में 4

  1. जाओ चरण का निर्माण करने के लिए लक्ष्य के तहत नेविगेटर
  2. का चयन करें "PoppyTests" के शीर्ष में क्लिक करें "पोस्ता"
  3. विस्तृत संकलित सूत्रों का कहना है
  4. क्लिक करें + साइन करें और फिर NSString + Inflections.m

जोड़ें इसके बाद आप कुछ इसी तरह निम्न उत्पादन

TestSuite '/blahblah/PoppyTests.octest(Tests)' 2011-03-28 21:31:34 +0000 पर समाप्त मिलना चाहिए। 0.000 (0.002) सेकंड

+3

धन्यवाद। इससे समस्या ठीक हुई, लेकिन PoppyTest लक्ष्य में निर्भरता के रूप में Poppy है। मैंने थोड़ा और अधिक देखा और पाया कि यह PoppyTest लक्ष्य (बिल्ड सेटिंग्स के तहत) के लिए अन्य लिंकर ध्वज के रूप में '-all_load' जोड़कर भी तय किया जा सकता है)। इस तरह किसी को सभी स्रोत फ़ाइलों को दोनों लक्ष्यों में जोड़ने की आवश्यकता नहीं होगी। –

+1

यह सही है कि मैंने यह नहीं देखा, मैं सोच रहा था कि यह पहली बार '-all_load' तरह का मुद्दा था क्योंकि आप एक श्रेणी के साथ काम कर रहे थे। मैं '-force_load [निर्भरता नाम] 'की सिफारिश करता हूं, यदि यह यूनिट परीक्षण नहीं था क्योंकि वह विकल्प केवल निर्दिष्ट निर्भरता में सभी प्रतीकों को लोड करेगा। – Joe

+0

धन्यवाद, मैं इसे देख लूंगा! –

1

में निष्पादित 1 परीक्षण, 1 विफलता (0 अप्रत्याशित) के साथ मैं भी इस बात की पुष्टि कर सकते हैं कि टेस्ट परियोजना के चरण बनाने के लिए आवश्यक फ़ाइलों को जोड़ने> संकलित सूत्रों का कहना है संग्रह इस समस्या का हल। बहुत बहुत धन्यवाद!

जब मैंने -all_load दृष्टिकोण की कोशिश की, हालांकि, मुझे त्रुटियों का एक समूह प्राप्त करना शुरू हुआ, जैसे कि _CGSizeZero आर्किटेक्चर i386 के लिए अपरिभाषित है। यह पता चला है कि कुछ कोड - इस तरह, जहां मैं अपने वर्गों में से एक में CGSizeZero का उपयोग करता हूं - दूसरा दृष्टिकोण तोड़ सकता है।

एक बार मैंने CGSizeZero को CGSizeMake (0, 0) के साथ बदल दिया, हालांकि, दूसरा दृष्टिकोण भी अच्छा काम करता था।

0

मैं एक ही स्थिति जब मैं ऑब्जेक्टिव-सी परियोजना में काम कर रहा था। मैंने निम्नलिखित कदम उठाए और यह अच्छी तरह से चला गया।

1) परियोजना का चयन करें और लक्ष्य प्राप्त करें।

2) का चयन टेस्ट लक्ष्य और छवि में दिखा तरह -ObjC जोड़ें।

enter image description here

3) अब इकाई XCTest को चलाने के लिए प्रयास करें।

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