考慮以下代碼,其工作方式(該loginWithEmail方法被預期爲,那麼,預期):OCMock,爲什麼我不能期望協議的方法?
_authenticationService = [[OCMockObject mockForClass:[AuthenticationService class]] retain];
[[_authenticationService expect] loginWithEmail:[OCMArg any] andPassword:[OCMArg any]];
對戰此代碼:
_authenticationService = [[OCMockObject mockForProtocol:@protocol(AuthenticationServiceProtocol)] retain];
[[_authenticationService expect] loginWithEmail:[OCMArg any] andPassword:[OCMArg any]];
第二個代碼示例第2行失敗,出現以下錯誤:
*** -[NSProxy doesNotRecognizeSelector:loginWithEmail:andPassword:] called! Unknown.m:0: error: -[MigratorTest methodRedacted] : ***
-[NSProxy doesNotRecognizeSelector:loginWithEmail:andPassword:] called!
AuthenticationServiceProtocol聲明方法:
@protocol AuthenticationServiceProtocol <NSObject>
@property (nonatomic, retain) id<AuthenticationDelegate> authenticationDelegate;
- (void)loginWithEmail:(NSString *)email andPassword:(NSString *)password;
- (void)logout;
- (void)refreshToken;
@end
而且它是在類中實現:
@interface AuthenticationService : NSObject <AuthenticationServiceProtocol>
這是使用OCMock爲iOS。
爲什麼expect
失敗時,模擬是mockForProtocol
?
你是從源碼建立OCMock嗎?在'OCProtocolMockObject'的'methodSignatureForSelector:'方法中放置一個斷點會很有趣。 –
不從源碼構建,只是下載了靜態庫。 – driis
你可以發佈實際的協議聲明嗎? –