不能存根方法“标题”,因为模拟类 OCMock 中不存在此类方法
Posted
技术标签:
【中文标题】不能存根方法“标题”,因为模拟类 OCMock 中不存在此类方法【英文标题】:Cannot Stub method "title" because no such method exist in the mocked class OCMock 【发布时间】:2014-06-14 23:43:19 【问题描述】:我正在编写这个单元测试:
- (void)testCellValues
id bookMock = [OCMockObject mockForClass:[LBBook class]];
[[[bookMock stub] andReturn:@"Book Title"] title];
当然后面还有一些代码。但是此时我在执行测试时遇到了这个错误:
[LBReviewsDashboardDataSourceTest testCellValues] failed: OCMockObject[LBBook]: cannot stub or expect method 'title' because no such method exists in the mocked class.
但是LBBook
类具有title
属性。这是 LBBook 类:
@interface LBBook : LBManagedObjectFactory
@property (nonatomic, retain) NSString * title;
@end
我无法意识到这里发生了什么,如果类的标题为 attribute
,为什么 OCMock 会返回该错误?
提前致谢。
【问题讨论】:
LBBook
的继承层次是什么? title
属性是如何实现的?实现中的属性是否有@synthesize
?
是的,它是@ErikDoernenburg,LBBook 的层次结构是一个NSManagedObject
【参考方案1】:
CoreData 使用动态属性。这些在 OCMock 中还没有得到适当的支持。可以改为存根 valueForKey:
。另见:OCMock: stub a @dynamic property 和 OCMock with Core Data dynamic properties problem
【讨论】:
谢谢答案!以上是关于不能存根方法“标题”,因为模拟类 OCMock 中不存在此类方法的主要内容,如果未能解决你的问题,请参考以下文章