2011-12-15 16 views
8

नहीं मिला मैं कुछ कीवी परीक्षणों का निर्माण कर रहा हूं और एक चेतावनी प्राप्त कर रहा हूं जिसे मैं समझा नहीं सकता। मैं किवी के लिए नया हूँ।किवी स्पेक यूनिट टेस्ट: इंस्टेंस विधि '-attachToVerifier: सत्यापनकर्ता:'

id conversationMock = [KWMock mockForProtocol:@protocol(Conversation)]; 
[conversationMock stub:@selector(end)]; 

और मेरे नियंत्रक, एक संपत्ति बुलाया "बातचीत":

@interface MyController() 
@property (nonatomic, assign) id<Conversation> conversation; 
@end 

नकली कल्पना मैं में प्रॉपर्टी को निर्दिष्ट किया जाता है, तो

मैं एक नकली वस्तु सेटअप विधि "अंत" बातचीत पर कहा जाता है कि क्या के लिए जाँच:

it(@"should end conversation", ^{ 
    [[[myController.conversation] should] receive] end]; 
    [myController stopTalking]; 
}); 

संकलक (LLVM 3। 0) एक चेतावनी दिखा रहा है: "इंस्टेंस विधि '--attachToVerifier: सत्यापनकर्ता:' नहीं मिला"

इसका कारण क्या है? क्या मुझे कुछ ठीक करने की ज़रूरत है? (परीक्षण ठीक चलाता है, विधि कॉल की जाँच करता है अंत ठीक काम करता है)

उत्तर

12

एक NSObject करने के लिए आईडी Typecasting चेतावनी से छुटकारा मिलता है:

[[(NSObject *) [myController.conversation]] प्राप्त करना चाहिए] अंत ];

+0

एक ही समस्या है, और यह समस्या ठीक है। हालांकि इसे हल करने का कोई और तरीका नहीं है? यह किवी के अन्य परीक्षण ढांचे पर आसानी से पढ़ने वाले लाभ को नष्ट कर देता है। – Sunkas

+0

मुझे अभी भी कीवी पसंद है, और मैं पिछले 6 महीनों में इसका बहुत उपयोग कर रहा हूं और कभी-कभी इस मुद्दे में केवल दौड़ता हूं। इसे आपको नीचे जाने मत देना। –

+1

मुझे यह पता चला कि यह 'id 'प्रकार की वस्तुओं को सत्यापित करने का प्रयास करते समय हुआ, सिवाय इसके कि वास्तव में एक त्रुटि हुई और संकलित नहीं किया गया। 'एनएसओब्जेक्ट *' को कास्टिंग करने से चाल चल रही थी लेकिन बदसूरत है। –

9

आपको क्या करने की जरूरत है:

build settings -> Other Linker flags 

झंडा जोड़ें: -all_load

+0

मैं इस प्रतिक्रिया को ऊपर उठाना चाहता हूं लेकिन क्या आप समझा सकते हैं कि इसकी आवश्यकता क्यों है? – avelis

+1

-attachToVerifier: सत्यापनकर्ता: NSObject + KiwiVerifierAdditions - (आईडी) संलग्न करने के लिए एनएसओब्जेक्ट पर एक श्रेणी में परिभाषित किया गया है: (आईडी ) एवीरिफायर;
-attachToVerifier: सत्यापनकर्ता: संकलन समय पर दिखाई देता है ताकि एप्लिकेशन ठीक से संकलित हो। एलएलवीएम की चेतावनी कास्टिंग आईडी <-> एनएसओब्जेक्ट के कारण है, जहां तक ​​मुझे पता है, उद्देश्य-सी लिंकर उन वस्तुओं को लोड नहीं करता है जिनमें केवल श्रेणियां हों। -all_load लिंकर को सभी मौजूदा ऑब्जेक्ट फ़ाइलों को लोड करने के लिए मजबूर करता है, इसलिए आखिरकार यह उस ऑब्जेक्ट फ़ाइल को लोड करेगा जिसमें संलग्न है ToVerifier ... आशा है कि इससे मदद मिलती है। – Komposr

+0

पहले '-ObjC' आज़माएं, जो ऑब्जेक्टिव-सी कोड के साथ ऑब्जेक्ट फ़ाइलों से लोड हो रहा है। यह ध्वज काम करने के लिए उपयोग नहीं किया गया था, और '-all_load' कामकाज था (ऐप्पल टीएन क्यूए 14 9 0 देखें), लेकिन अब यह ठीक काम करता प्रतीत होता है। (मेरे पास ओपी की त्रुटि थी और इस जवाब ने मेरी याददाश्त को घुमाया; मैंने 'ओबीजेसी' की कोशिश की और यह समस्या ठीक कर दी।) –

1

@ Komposr के जवाब के आधार पर, मैं कीवी साथ अपनी परियोजनाओं के एक जोड़े को देखा और पाया कि मैं क्या करने की जरूरत है निम्नलिखित:

सेटिंग बिल्ड -> अन्य लिंकर झंडे

झंडा जोड़ें: -ObjC

नोट कि मैं हूँ CocoaPods का उपयोग नहीं। मैंने एक स्थिर पुस्तकालय के रूप में किवी को डाउनलोड और संकलित किया है जिसमें मैं शामिल हूं ...