Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在OCMock中为类的所有实例模拟方法_Objective C_Unit Testing_Ocmock - Fatal编程技术网

Objective c 在OCMock中为类的所有实例模拟方法

Objective c 在OCMock中为类的所有实例模拟方法,objective-c,unit-testing,ocmock,Objective C,Unit Testing,Ocmock,我想使用OCMock为一个类的所有实例模拟一个实例方法,但是我没有该类的实例来覆盖它,而是在我正在测试的方法中创建它 所以我的问题是:是否可以为类的所有实例重写该方法,或者我是否需要将该实例注入该方法,而不是在方法内部创建它 i、 e 我最终通过这一套方法达到了目的: 方法原始方法=无; 方法swizzleMethod=nil #import <objc/runtime.h> .... - (void) swizzleInstanceMethodForInstancesOfCla

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

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

i、 e


我最终通过这一套方法达到了目的:

方法原始方法=无; 方法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;
}
#导入
....
-(无效)SwizzleInstanceMethod用于类:(类)目标类选择器:(SEL)选择器的安装
{
originalMethod=class_getInstanceMethod(targetClass,选择器);
swizzleMethod=class\u getInstanceMethod([self class],选择器);
方法交换实施(原始方法,Swizzle方法);
}
-(无效)脱毛
{
方法交换实施(Swizzle法、原始法);
Swizzle方法=零;
原始方法=零;
}
#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;
}