consideran este código, que funciona (el método loginWithEmail se espera que, así, se espera):OCMock, ¿por qué no puedo esperar el método en un protocolo?
_authenticationService = [[OCMockObject mockForClass:[AuthenticationService class]] retain];
[[_authenticationService expect] loginWithEmail:[OCMArg any] andPassword:[OCMArg any]];
Versus este código:
_authenticationService = [[OCMockObject mockForProtocol:@protocol(AuthenticationServiceProtocol)] retain];
[[_authenticationService expect] loginWithEmail:[OCMArg any] andPassword:[OCMArg any]];
El segundo ejemplo de código falla en la línea 2 con la siguiente de error:
*** -[NSProxy doesNotRecognizeSelector:loginWithEmail:andPassword:] called! Unknown.m:0: error: -[MigratorTest methodRedacted] : ***
-[NSProxy doesNotRecognizeSelector:loginWithEmail:andPassword:] called!
AuthenticationServiceProtocol declara el método:
@protocol AuthenticationServiceProtocol <NSObject>
@property (nonatomic, retain) id<AuthenticationDelegate> authenticationDelegate;
- (void)loginWithEmail:(NSString *)email andPassword:(NSString *)password;
- (void)logout;
- (void)refreshToken;
@end
Y se implementa en la clase:
@interface AuthenticationService : NSObject <AuthenticationServiceProtocol>
Esto es usando OCMock para iOS.
¿Por qué expect
falla cuando el simulacro es mockForProtocol
?
¿Está compilando OCMock desde la fuente? Sería interesante poner un punto de interrupción en el método 'methodSignatureForSelector:' de 'OCProtocolMockObject'. –
No se crea desde la fuente, solo se descargó la biblioteca estática. – driis
¿Se puede publicar la declaración del protocolo real? –