在OCMock中为一个类的所有实例模拟一个方法

时间:2012-05-03 13:19:18

标签: objective-c unit-testing ocmock

我想使用OCMock为类的所有实例模拟一个实例方法,但是我没有类的实例来覆盖它,而是在我正在测试的方法中创建它。

所以我的问题是:是否可以为类的所有实例重写此方法,或者我是否需要将该实例注入方法而不是在方法内创建它?

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

1 个答案:

答案 0 :(得分:1)

我最终使用这套方法到达那里:

方法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;
}