【发布时间】:2013-12-04 10:34:39
【问题描述】:
简介:
我有这个问题标题中提到的工具 (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 中使用类方法尝试这个测试!
【问题讨论】:
-
一个问题是您不能使用 andReturn 返回原语。这样做:
andReturnValue:OCMOCK_VALUE((BOOL){NO})看看是否有帮助。 -
Ben,感谢您提供更多信息 - 很高兴知道。不幸的是,它没有帮助。
标签: objective-c unit-testing xcode5 ocmock xctest