2012-04-16 14 views
5

प्रश्न के लघु संस्करण:मजाक उम्मीदों

क्या निम्नलिखित कीवी/iOS नकली उम्मीद के साथ गलत क्या है? सवाल का

लांग संस्करण:

मैं एक साधारण वर्ग है कि एक NSConnection संभालती के लिए कीवी, IOS में एक परीक्षण लिखने की कोशिश कर रहा हूँ। यह जांचने के लिए कि कक्षा एनएससीनेक्शन से कॉलबैक को संभालती है, मैं इसे सामान्य तरीके से एनएससीनेक्शन प्रतिनिधि प्रतिनिधि भेजता हूं। मेरे पास कक्षा में एक प्रतिनिधि है जो मेरी कक्षा का उपयोग करने वाले किसी भी व्यक्ति को डेटा भेजता है। मेरी कक्षा का परीक्षण करने के लिए मुझे एक मजाकदार प्रतिनिधि को इंजेक्ट करना होगा और फिर जांचें कि मेरी वांछित विधियों को बुलाया जाता है। सरल रूप में है कि :)

कीवी परीक्षण के लिए मेरे कोड है:

//Some ivars declared elsewhere: 
testString1 = @"asd323/4 d14"; 
testString2 = @"as98 /2y9h3fdd14"; 
testData1 = [testString1 dataUsingEncoding:NSUTF8StringEncoding]; 
testData2 = [testString2 dataUsingEncoding:NSUTF8StringEncoding]; 
mockURLRespons = [NSHTTPURLResponse mock]; 
int value = 11111; 
id mockDelegate = [KWMock mockForProtocol:@protocol(SharepointConnectionDelegate)]; 
communicator = [[SharepointCommunicator alloc] init]; 

it (@"should send recieve data back to delegate2", ^{ 
    [communicator setDelegate:mockDelegate]; 
    [mockURLRespons stub:@selector(statusCode) andReturn:theValue(value)]; 
    [(id)communicator connection:niceMockConnector didReceiveResponse:mockURLRespons]; 
    [(id)communicator connection:niceMockConnector didReceiveData:testData1]; 
    [(id)communicator connection:niceMockConnector didReceiveData:testData2]; 
    [(id)communicator connectionDidFinishLoading:niceMockConnector]; 

    [[mockDelegate should] receive:@selector(connectionDidSucceedWithText:andStatus:) withArguments:[testString1 stringByAppendingString:testString2],theValue(value),nil]; 

}); 

और मेरे SharepointCommunicator.m में:

-(void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse *)response { 
    if (connection != aConnection) { 
     [connection cancel]; 
     connection = aConnection; 
    } 
    responseData = [[NSMutableData alloc] init]; 
    statusCode = [(NSHTTPURLResponse*)response statusCode]; 
} 

-(void)connection:(NSURLConnection *)aConnection didReceiveData:(NSData *)data { 
    if (aConnection != self.connection) 
    return; 
    [responseData appendData:data]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSString *txt = [[NSString alloc] initWithData:responseData encoding: NSASCIIStringEncoding]; 
    NSLog(@"Statuscode: %i", statusCode); 
    NSLog(@"Data is: %@",txt); 
    [delegate connectionDidSucceedWithText:txt andStatus:statusCode]; 
    [self.connection cancel]; 
    self.connection = nil; 
} 

इस कोड काम करता है और सही है। चेकपॉइंट के साथ इसे डिबग करने से यह अपेक्षा करता है कि यह अपेक्षित है। स्टेटस कोड के मान 11111 हैं। और txt testString1 + textString2 है। फिर भी यह निम्न त्रुटि के साथ परीक्षण में पर अंतिम पंक्ति पर विफल रहता है:

error: -[kiwiSharepointCommunicatorTest Sharepointcommunicator_AStateTheComponentIsIn_ShouldSendRecieveDataBackToDelegate2] : 'Sharepointcommunicator, a state the component is in, should send recieve data back to delegate2' [FAILED], mock received unexpected message -connectionDidSucceedWithText:"asd323/4 d14as98 /2y9h3fdd14" andStatus:11111 
Test Case '-[kiwiSharepointCommunicatorTest Sharepointcommunicator_AStateTheComponentIsIn_ShouldSendRecieveDataBackToDelegate2]' failed (3.684 seconds). 

परीक्षण में पिछले पंक्ति को निकालने अब भी वही त्रुटि उत्पन्न करते हैं। withArguments:: मैं की मेरी समझ प्राप्त लगता है कि कुछ गड़बड़ है ..

+0

मुझे लगता है कि यह किवी के तर्कों के मिलान के साथ कुछ करने के लिए है। शायद मैच ऑब्जेक्ट्स के पॉइंटर्स पर है? और यही कारण है कि स्ट्रिंग्स मेल नहीं खाते हैं, भले ही उनमें एक ही स्ट्रिंग हों? या शायद यह इन-इट्स जैसे गैर-ऑब्जेक्ट्स के मिलान को संभाल नहीं सकता है ... – Sunkas

+0

मुझे एक समान समस्या है, मेरा प्रतिनिधि अपने प्रतिनिधि (नकली) – quantumpotato

उत्तर

6

आप संदेश को इसके बारे में प्राप्त करने के लिए है के लिए तैयार करने के लिए mockDelegate connectionDidFinishLoading करने के लिए कॉल से पहले [[mockDelegate should] receive...कॉल करनी होगी।

+0

पर तार पार कर रहा है, अब कुछ समय था जब मैंने इसे कोड किया था, लेकिन मुझे पूरा यकीन है कि आप सही हैं। मैंने इसे एक छोटा रास्ता दोहराया और फिर इसे वापस काम कर लिया। शायद क्योंकि उम्मीद अब सामने स्थापित की गई थी। – Sunkas

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