2012-05-03 2 views
5

OCMock을 사용하여 클래스의 모든 인스턴스에 대한 인스턴스 메소드를 모의하고 싶지만 메소드 대신 클래스의 인스턴스를 오버라이드 할 메소드가 없습니다. 내가 시험하고 있다는 걸.클래스의 모든 인스턴스에 대해 OCMock에서 메소드 조롱

내 질문은 : 클래스의 모든 인스턴스에 대해이 메서드를 재정의 할 수 있습니까? 또는 메서드 내에서 인스턴스를 만들지 않고 인스턴스에 삽입해야합니까?

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

답변

1

나는 방법이 세트 단부 있었을 :

방법 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; 
}