Krótka wersja pytanie:szyderczy oczekiwania w Kiwi (iOS) dla delegata
Co jest nie tak z następującym Kiwi/iOS udawanym oczekiwania?
Długa wersja pytania:
Próbuję napisać test w kiwi, iOS na prostą klasę, która obsługuje do NSConnection. Aby przetestować, czy klasa obsługuje wywołanie zwrotne z NSConnection, wysyłam jej metody delegatów, które normalnie wykonuje NSConnection. Mam delegata w klasie, który wysyła dane z powrotem do tego, kto używa mojej klasy. Aby przetestować moją klasę, muszę wstrzyknąć wyśmiewanego delegata, a następnie sprawdzić, czy moje pożądane metody są wywoływane. Proste :)
Mój kod do testu Kiwi jest:
//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];
});
I w moim 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;
}
Ten kod działa i jest poprawny. Debugowanie go za pomocą punktu kontrolnego pokazuje, że działa zgodnie z oczekiwaniami. Wartości statusCode to 11111. a txt to testString1 + textString2. Nadal nie jest on w ostatnim rzędzie na w badaniu z powodu następującego błędu:
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).
Usunięcie ostatniego wiersza w teście nadal generują ten sam błąd. Chyba moje rozumienie otrzymują: withArguments: jest źle ..
Zakładam, że ma to coś wspólnego z dopasowaniem argumentów Kiwi. Być może mecz jest na wskaźnikach do obiektów? I dlatego struny nie pasują, nawet jeśli zawierają te same struny? A może nie poradzi sobie z dopasowaniem nie-obiektów, takich jak int ... – Sunkas
Mam podobny problem, mój delegat przekazuje ciągi do swojego delegata (próbnego) – quantumpotato