Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
@class GHTestCase;
@interface GHTestCase (Swizzle)
+ (id)sharedMock;
+ (void)setSharedMock:(id)newMock;
- (void)swizzle:(Class)target_class selector:(SEL)selector;
- (void)deswizzle;
#import "GHUnit.h"
#import "GHTestCase+Swizzle.h"
#import <objc/objc-runtime.h>
id sharedMockPointer = nil;
@implementation GHTestCase (Swizzle)
return sharedMockPointer;
sharedMockPointer = newMock;
Method originalMethod = nil;
Method swizzleMethod = nil;
- (void)swizzle:(Class)target_class selector:(SEL)selector
originalMethod = class_getClassMethod(target_class, selector);
swizzleMethod = class_getInstanceMethod([self class], selector);
method_exchangeImplementations(originalMethod, swizzleMethod);
- (void)deswizzle
method_exchangeImplementations(swizzleMethod, originalMethod);
swizzleMethod = nil;
originalMethod = nil;

pk commented Jun 21, 2011

Hi I found your gist while searching for testing of the Class methods, it inspired me to implement the same concepts with blocks: git://

Thanks for sharing!


ghost commented Jun 21, 2011

That is awesome! Thanks for the update with blocks.

jmoody commented Nov 2, 2011


I had trouble compiling this for the simulator (Xcode 4.2).

If you change

#import <objc/objc-runtime.h 


#import <objc/runtime.h>

this will compile and run in both the simulator and devices.

Sorry for the multiple edits - goofed on the formatting.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment