2013-03-16 68 views
1

OCMock目前不支持的原始参数宽松匹配。然而,我有我需要上OCMockObject设置属性,这个属性被声明为copy属性。因此它实现了- (id)copyWithZone:(NSZone *)zoneNSZone被定义为typedef struct _NSZone NSZone,并且因为它是一个结构,它是一个原始类型。因此,我得到的错误我该如何模拟一个NSZone?

Incompatible pointer types sending 'id' to parameter of type 'NSZone *' (aka 'struct _NSZone *') 

在这条线:

[[mockObject expect] copyWithZone:[OCMArg any]]; 

是解决它的最好方法声明属性与retain属性,而不是copy?使用copy的好处是该对象不可能被另一个对象修改。

回答

2

NSZone *是一个指针。虽然OCMock不提供原始类型的“松散”匹配,但它确实具有[OCMArg anyPointer]来匹配任何指针。

这就是说,如果你只需要调用期待,而不是也andReturn:,则模拟的方法只会返回,这可能不是你想要的。我的猜测是,以下是你的情况更好的解决方案:

[[[mock expect] andReturn:mock] copyWithZone:[OCMArg anyPointer]]; 

这显然不创建模拟的副本,它只是确保模拟本身是从copyWithZone的调用返回:

3

就叫 - 复制呢?它会调用-copyWithZone:,而zone参数是完全没用的。

相关问题