I’m trying to do something like this:
id synchronizerDelegate = [OCMockObject mockForProtocol:@protocol(SynchronizerDelegate)];
BOOL isRespondsToSelector = NO;
[[[synchronizerDelegate stub] andReturnValue:OCMOCK_VALUE(isRespondsToSelector)] respondsToSelector:@selector(didLoadFullImage:)];
GHAssertFalse([synchronizerDelegate respondsToSelector:@selector(didLoadFullImage:)], nil);
Here is the definition of SynchronizerDelegate
@protocol SynchronizerDelegate <NSObject>
- (void)didLoadFullImage:(NSData *)data;
@end
But this test case always fail (the returned value is YES).
Anyone tried to stub “respondsToSelector” method before?
When you mockForProtocol, the mock doesn’t actually conform to the protocol, so
OCProtocolMockObjectoverridesrespondsToSelectorto return YES for methods defined in the protocol.OCMock depends on
forwardInvocation:, which is invoked by the runtime when an object hasn’t defined the method being called. SinceOCProtocolMockObjectimplementsrespondsToSelector, you can’t mock it.If you describe what you’re trying to achieve, there might be another way to approach it.