wil*_*amb 6 unit-testing objective-c ocmock
我想使用OCMock为类的所有实例模拟一个实例方法,但是我没有类的实例来覆盖它,而是在我正在测试的方法中创建它.
所以我的问题是:是否可以为类的所有实例重写此方法,或者我是否需要将该实例注入方法而不是在方法内创建它?
即
[[ClassThatHasTheInstanceMethodToOverride andCall:@selector(callThisMethodInstead) onObject:self] someInstanceMethod];
Run Code Online (Sandbox Code Playgroud)
我最终通过这组方法到达了那里:
方法原始方法 = 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;
}
Run Code Online (Sandbox Code Playgroud)