我一直在尝试模拟一个简单的属性UITextField
:
@property(nonatomic,readonly,getter=isEditing) BOOL editing;
我试图模拟这两种方式
1.)使用完整的类方法混合技术(通常对于基于类的方法,我会这样做)
- (void)swapOutTextFieldIsEditing
{
method_exchangeImplementations(
class_getClassMethod([UITextField class], @selector(isEditing)),
class_getClassMethod([self class], @selector(isEditingEnabledMock))
);
}
- (void)resetTextFieldIsEditing
{
method_exchangeImplementations(
class_getClassMethod([self class], @selector(isEditingEnabledMock)),
class_getClassMethod([UITextField class], @selector(isEditing))
);
}
+ (BOOL)isEditingEnabledMock {
return isEditingMockResult;
}
2.) 使用自定义 ocmock 助手创建自定义“并返回布尔”方法
- (id)andReturnBool:(BOOL)aValue {
NSValue *wrappedValue = nil;
wrappedValue = [NSValue valueWithBytes:&aValue
objCType:@encode(BOOL)];
return [self andReturnValue:wrappedValue];
}
遗憾的是,这两种技术都失败了,我几乎可以肯定这是因为这是UITextField
标记为只读 w/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]);
}
}
这是我的基本存根语法(与上述一起使用)
id firstField = [OCMockObject niceMockForClass:[UITextField class]];
[[[firstField stub] andReturnBool:YES] isEditing];
有谁知道另一种方法来存根这个结果?如果不是上面列出的两种方法呢?我在这里做错了什么?
先感谢您