4

J'utilise GHUnit & OCMock pour effectuer des tests dans mon application iOS.Utilisation des attentes de bloc avec OCMock

J'ai donc du mal à les intégrer.

Le code suivant fonctionne bien.

NSString *s = [NSString stringWithString:@"122"]; 
id mock = [OCMockObject partialMockForObject:s]; 
[[[mock stub] andReturn:@"255"] capitalizedString]; 
NSString *returnValue = [mock capitalizedString]; 
GHAssertEqualObjects(returnValue, @"255", @"Should be equal"); 
[mock verify]; 

Mais quand je change de [[[stub maquette] andReturn: @ "255"] capitalizedString]; dans

[[[mock stub] andDo:^(NSInvocation *invocation) { 
    [invocation setReturnValue:@"255"]; 
}] capitalizedString]; 

Je suis une erreur qui dit « Raison: « NSCFString » devrait être égal à « 255 » doit être égale »

Je pense que les deux déclarations doivent faire exactement la même chose. Ai-je tort?

Répondre

7

setReturnValue: attend un pointeur sur la valeur de retour, de sorte que votre bloc doit être:

void (^theBlock)(NSInvocation *) = ^(NSInvocation *invocation) { 
    NSString *capitalizedString = @"255"; 
    [invocation setReturnValue:&capitalizedString]; 
}; 
+0

explication Vous est plus claire que la doc d'Apple! – leafduo

+0

@leafduo 'GHUnit' et' OCMock' ne sont pas d'Apple. – ThomasW

+3

@ThomasW Je pense qu'il fait référence aux documents [NSInvocation docs] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/Reference/Reference.html#//apple_ref/ doc/uid/20000212-setReturnValue_) –

Questions connexes