2012-04-16 11 views
5

Kısa versiyon:alaycı beklentiler soru

aşağıdaki kivi/iOS sahte beklenti ile yanlış olan nedir? Sorunun

Uzun versiyon:

Bir NSConnection kolları basit sınıf için kivi, iOS bir test yazmaya çalışıyorum. Sınıfın NSConnection'dan geri çağrıyı işlediğini test etmek için normal olarak NSConnection delege yöntemlerini gönderirim. Sınıfta, benim sınıfımı kullanan herkese veri gönderen bir temsilci var. Sınıfımı test etmek için alaylı bir delege enjekte etmeliyim ve sonra istediğim yöntemlerin çağrıldığını kontrol etmeliyim. Basit kivi testi için o :)

Kodum olduğu gibi:

//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]; 

}); 

Ve SharepointCommunicator.m içinde

:

-(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; 
} 

Bu kod çalışır ve doğrudur. Denetim noktası ile hata ayıklaması beklendiği gibi yapar. StatusCode değerleri 11111. ve txt testString1 + textString2'dir. Yine aşağıdaki hata ile testte son satırda başarısız:

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). 

hala aynı hatayı oluşturmak testinde son satırı kaldırılıyor. withArguments: Aldığım benim anlayış tahmin yanlıştır ..

+0

Kiwi'nin argümanlarla uyuşmasıyla ilgili bir şey olduğunu varsayıyorum. Belki de maçlar nesnelerin işaretçilerinde mi? Ve bu yüzden dizeler aynı dizeleri içermelerine rağmen uyuşmuyorlar mı? Ya da belki de ints gibi olmayan nesnelerin eşleşmesini başaramaz ... – Sunkas

+0

Benzer bir sorun yaşıyorum, delege delege delegesine geçiyor (sahte) – quantumpotato

cevap

6

Bunu almak üzere olduğu mesajı için mockDelegate hazırlamak için önce connectionDidFinishLoading çağrısını [[mockDelegate should] receive...aramak zorunda.

+0

Bunu kodladığımdan beri biraz zaman geçti, ama Doğru olduğuna eminim. Bunu daha küçük bir yolla hatırladım ve o zamana kadar çalıştım. Muhtemelen beklenti şimdi ayarlanmıştı. – Sunkas