OCMock 不能存根分类方法
Posted
技术标签:
【中文标题】OCMock 不能存根分类方法【英文标题】:OCMock can't stub a category method 【发布时间】:2014-07-09 15:42:07 【问题描述】:我正在尝试使用 NSMutableURLConnection
的模拟,但 OCMock 不想对在 NSMutableURLConnection
的 NSHTTPURLRequest
类别中声明的方法进行存根。
id requestMock = OCMClassMock([NSMutableURLRequest class]);
OCMStub([requestMock setHTTPBody]);
编译器不会接受第二行。我得到“ARC语义问题:选择器'setHTTPBody'没有已知的实例方法。”
编译器允许我存根HTTPBody
(而不是setHTTPBody
),但它永远不会被调用。
有人知道如何获得一个工作存根并在这种情况下让编译器满意吗?
【问题讨论】:
【参考方案1】:方法名是setHTTPBody:(末尾有一个冒号,表示一个参数)。冒号是方法名称的重要组成部分。编译器错误是准确的;您需要使用正确的方法名称。
但是,您正在使用一个不错的类模拟,它将有一个空的 setHTTPBody 实现:它不会做任何事情(不会存储数据),因此调用它不会对使用访问器的其他代码有帮助。您可以尝试通过创建一个不太好的模拟来找出确实调用了哪些方法,这将为任何意外的方法抛出异常,并通过反复试验找到真正需要的方法。或者,也许创建一个常规的 NSMutableURLRequest 对象,并从中创建一个部分模拟,仅存根您需要更改的方法,但不理会其余的行为。
【讨论】:
以上是关于OCMock 不能存根分类方法的主要内容,如果未能解决你的问题,请参考以下文章