2012-05-03 28 views
5

Tôi muốn thử một phương thức cá thể cho tất cả các cá thể của một lớp bằng OCMock tuy nhiên tôi không có cá thể của lớp để ghi đè nó thay vì nó được tạo bên trong phương thức mà tôi đang thử nghiệm. Vì vậy, câu hỏi của tôi là: có thể ghi đè phương pháp này cho tất cả các trường hợp của một lớp hoặc tôi sẽ cần phải tiêm trường hợp đó vào phương thức chứ không phải tạo nó bên trong phương thức không? Có phải không ?.Mocking một phương thức trong OCMock cho tất cả các cá thể của một lớp

ví dụ:

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

Trả lời

1

tôi đến đó vào cuối với thiết lập này của phương pháp:

Phương pháp originalMethod = nil; Phương thức 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; 
} 
Các vấn đề liên quan