不能存根方法“标题”,因为模拟类 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 中不存在此类方法的主要内容,如果未能解决你的问题,请参考以下文章

不能在 Xcode 5.0 中使用 OCMock 2.1+ 存根类方法

如何在ARC的OCMock中模拟**参数

非常简单的基本 OCMock 存根不起作用

通过 OCMock 存根覆盖方法

所有调用的 OCMock 存根类方法

OCMock 中的存根类方法