2013-03-16 25 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參數是完全沒用的。

相關問題