Ok, so first the base case, where we are mocking a category class method:
Some class I had laying around for testing, Huzzah:
@interface Huzzah : NSObject
+ (void)doClass;
+ (void)doClass2;
+ (void)doClass3;
- (void)doInstance;
@end
I created a category:
@interface Huzzah (Cat)
+ (BOOL)hasX:(NSString *)x;
@end
@implementation Huzzah (Cat)
+ (BOOL)hasX:(NSString *)x
{
return YES;
}
@end
In my test:
#import "Huzzah+Cat.h"
- (void)testHuzzahCat
{
id mock = [OCMockObject mockForClass:Huzzah.class];
[[[mock stub] andReturnValue:OCMOCK_VALUE((BOOL){NO})] hasX:OCMOCK_ANY];
NSLog(@"hasX: %i", [Huzzah hasX:@"DoYouHas?"]);
}
Output: hasX: 0
Now let's try a category on NSObject:
@interface NSObject (Cat)
+ (BOOL)hasY:(NSString *)y;
@end
@implementation NSObject (Cat)
+ (BOOL)hasY:(NSString *)y
{
return YES;
}
@end
Our new test:
#import "NSObject+Cat.h"
- (void)testObjectCat
{
id mock = [OCMockObject mockForClass:Huzzah.class];
[[[mock stub] andReturnValue:OCMOCK_VALUE((BOOL){NO})] hasY:OCMOCK_ANY];
NSLog(@"hasY: %i", [Huzzah hasY:@"DoYouHas?"]);
}
Results in: hasY: 0
Is it possible that the implementation of category is not getting compiled into your project?