Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 如何在UITextField上模拟isEditing getter?_Objective C_Uitextfield_Ocmock - Fatal编程技术网

Objective c 如何在UITextField上模拟isEditing getter?

Objective c 如何在UITextField上模拟isEditing getter?,objective-c,uitextfield,ocmock,Objective C,Uitextfield,Ocmock,我一直在尝试模拟UITextField上的一个简单属性: @property(非原子、只读、getter=isEditing)BOOL编辑 我试着用两种方式来嘲笑这一点 1.)使用完整的类方法swizzle技术(通常对于基于类的方法,我会这样做) 2.)使用自定义ocmock帮助程序创建自定义“并返回bool”方法 不幸的是,这两种技术都失败了,我几乎可以肯定这是因为这是UITextFieldmarked readonly w/a getter上的一个正常属性(以前在iOS上从未见过) **通过

我一直在尝试模拟
UITextField
上的一个简单属性:

@property(非原子、只读、getter=isEditing)BOOL编辑

我试着用两种方式来嘲笑这一点

1.)使用完整的类方法swizzle技术(通常对于基于类的方法,我会这样做)

2.)使用自定义ocmock帮助程序创建自定义“并返回bool”方法

不幸的是,这两种技术都失败了,我几乎可以肯定这是因为这是
UITextField
marked readonly w/a getter上的一个正常属性(以前在iOS上从未见过)

**通过失败,以下
NSLog
始终返回(null)-这意味着我不能存根此

- (IBAction)next
{
    for (int i = 0; i<[self.fieldsArray count]; i++) {
        NSLog(@"is this field being edited? %@", [[self.fieldsArray objectAtIndex:i] isEditing]);
    }
}
有人知道另一种方法来存根这个结果吗?如果没有,上面列出的两种方法是什么?我有没有做错什么


提前谢谢你

你似乎把类方法和实例方法混淆了。运行时函数
class\u getClassMethod
返回一个类方法,但由于您感兴趣的方法是属性访问器,因此它不能是类方法(类没有属性,只有实例有属性)。相反,使用
class\u getInstanceMethod
获取访问器方法。

使用此存根设置时

id firstField = [OCMockObject niceMockForClass:[UITextField class]];
[[[firstField stub] andReturnBool:YES] isEditing];
你对firstField还做了什么?您确定其他对象与模拟实例firstField交互,还是与XIB文件中实例化的UITextField的真实实例交互

对于无法注入mock并且必须处理在别处创建的实例的情况,OCMock提供部分mock。这些允许您在现有对象上存根方法。在您的情况下,您可以这样做:

id firstField = ... // somehow get a reference to the actual field object
id firstFieldMock = [OCMockObject partialMockForObject:firstField];
[[[firstFieldMock stub] andReturnBool:YES] isEditing];

之后,当另一个对象在firstField上调用isEditing时,mock将拦截它。

放得好-但是当我将其修改为class_getInstanceMethod时,它似乎仍然没有正确地将其插入。这个只读获取者不让我存根还有其他原因吗?
id firstField = [OCMockObject niceMockForClass:[UITextField class]];
[[[firstField stub] andReturnBool:YES] isEditing];
id firstField = [OCMockObject niceMockForClass:[UITextField class]];
[[[firstField stub] andReturnBool:YES] isEditing];
id firstField = ... // somehow get a reference to the actual field object
id firstFieldMock = [OCMockObject partialMockForObject:firstField];
[[[firstFieldMock stub] andReturnBool:YES] isEditing];