7

OCMock を使用してクラスのすべてのインスタンスのインスタンス メソッドをモックしたいのですが、それをオーバーライドするクラスのインスタンスがなく、テストしているメソッド内で作成されます。

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

すなわち

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

1 に答える 1

3

私は最終的にこの一連のメソッドでそこにたどり着きました:

メソッド originalMethod = nil; メソッド 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;
}
于 2012-05-03T14:07:24.253 に答える