OCMock不能存根类别方法

esp*_*ess 3 objective-c ocmock ios

我正在尝试使用模拟NSMutableURLConnection,但OCMock不希望在NSHTTPURLRequest类别中声明的存根方法NSMutableURLConnection.

id requestMock = OCMClassMock([NSMutableURLRequest class]);
OCMStub([requestMock setHTTPBody]);
Run Code Online (Sandbox Code Playgroud)

编译器不接受第二行.我得到"ARC语义问题:选择器'setHTTPBody'没有已知的实例方法."

编译器允许我存根HTTPBody(而不是setHTTPBody)但它永远不会被调用.

任何人都知道如何获得工作存根,并让编译器在这种情况下幸福吗?

Car*_*erg 5

方法名称为setHTTPBody :(末尾有冒号,表示参数).冒号是方法名称的重要组成部分.编译错误是准确的; 您需要使用正确的方法名称.

你正在使用一个很好的类mock,它将为setHTTPBody提供一个空的实现:它不会做任何事情(不会存储数据),所以调用它将无助于使用访问器的其他代码.您可以尝试通过创建一个非好的模拟来找出调用哪些方法,这将为任何意外的方法抛出异常,并通过反复试验来找到真正需要的方法.或者,也许创建一个常规的NSMutableURLRequest对象,并从中创建一个局部模拟,只需要修改你需要改变的方法,但只留下其余的行为.