2012-05-03 12 views
5

OCMockを使用してクラスのすべてのインスタンスに対してインスタンスメソッドをモックしたいのですが、メソッドの内部で作成されるクラスのインスタンスをオーバーライドする必要はありません私はテストしている。OCMockでクラスのすべてのインスタンスのメソッドをモックする

私の質問は、クラスのすべてのインスタンスに対してこのメ​​ソッドをオーバーライドすることは可能ですか、メソッド内にインスタンスを作成するのではなく、そのインスタンスをメソッドに挿入する必要がありますか?

すなわち

[[ClassThatHasTheInstanceMethodToOverride andCall:@selector(callThisMethodInstead) onObject:self] someInstanceMethod]; 

答えて

1

Iは、メソッドのセットと最後にそこに着いた:

方法originalMethod =ゼロ、 メソッドswizzleMethod = nil;

#import <objc/runtime.h> 

.... 

- (void) swizzleInstanceMethodForInstancesOfClass:(Class)targetClass selector:(SEL)selector 
{ 
    originalMethod = class_getInstanceMethod(targetClass, selector); 
    swizzleMethod = class_getInstanceMethod([self class], selector); 
    method_exchangeImplementations(originalMethod, swizzleMethod); 
} 

- (void) deswizzle 
{ 
    method_exchangeImplementations(swizzleMethod, originalMethod); 
    swizzleMethod = nil; 
    originalMethod = nil; 
} 
関連する問題