介绍:
我有这个问题标题中提到的工具(Xcode 5.0.2)、库(OCMock 2.2.1)和测试(XCTest)设置。
类别:
我在 NSObject 上有一个类别,其类方法如下:
+ (BOOL) hasDeclaredPropertyWithName: (NSString*) property;
OCMock 和 XCTest 框架有问题吗?:
现在我有一个简单的测试设置,我在其中模拟一个简单的值对象,如下所示:(模拟值对象是一种测试气味,我知道。但这只是为了说明目的。)
- (void) testFoo {
id mock = [OCMockObject mockForClass: [TestObject class]];
[[[mock stub] andReturn: NO] hasDeclaredPropertyWithName: @"propertyX"];
[mock hasDeclaredPropertyWithName: @"propertyX"];
}
当执行测试方法 testFoo 的第 3 行时,我最终得到错误:
-[NSProxy doesNotRecognizeSelector:hasDeclaredPropertyWithName:] called!
问题:
为什么使用 OCMock 模拟类方法似乎是不可能的(至少在我的设置中)?
如果我hasDeclaredPropertyWithName
采用像这样的实例方法
- (BOOL) hasDeclaredPropertyWithName: (NSString*) property;
一切正常!
有人可以向我解释这种 OCMock 缺陷吗?还是我在这里对 Objective-C 有一个重大的误解?:)
该类别是否可能导致运行时和/或 OCMock 头痛?顺便说一句,我没有TestObject
直接用类方法尝试这个测试!