Consider this code that works (loginWithEmail method is expected as expected):
_authenticationService = [[OCMockObject mockForClass:[AuthenticationService class]] retain]; [[_authenticationService expect] loginWithEmail:[OCMArg any] andPassword:[OCMArg any]];
Compared to this code:
_authenticationService = [[OCMockObject mockForProtocol:@protocol(AuthenticationServiceProtocol)] retain]; [[_authenticationService expect] loginWithEmail:[OCMArg any] andPassword:[OCMArg any]];
The second code example does not work on line 2 with the following error:
*** -[NSProxy doesNotRecognizeSelector:loginWithEmail:andPassword:] called! Unknown.m:0: error: -[MigratorTest methodRedacted] : *** -[NSProxy doesNotRecognizeSelector:loginWithEmail:andPassword:] called!
AuthenticationServiceProtocol declares a method:
@protocol AuthenticationServiceProtocol <NSObject> @property (nonatomic, retain) id<AuthenticationDelegate> authenticationDelegate; - (void)loginWithEmail:(NSString *)email andPassword:(NSString *)password; - (void)logout; - (void)refreshToken; @end
And it is implemented in the class:
@interface AuthenticationService : NSObject <AuthenticationServiceProtocol>
It uses OCMock for iOS.
Why expect fail when the layout is mockForProtocol ?
ios objective-c mocking ocmock
driis
source share