2013-03-16 6 views
1

OCMock은 현재 원시 인수의 느슨한 일치를 지원하지 않습니다. 그러나 나는 재산을 OCMockObject에 설정해야하며이 속성은 copy 속성으로 선언되었습니다. 따라서 - (id)copyWithZone:(NSZone *)zone을 구현합니다. NSZonetypedef 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은 원시 타입에 대해 "loose"매칭을 제공하지는 않지만, 일치시킬 [OCMArg anyPointer]가 있습니다. 방금도 andReturn 을 기대 호출하고하지 않을 경우 말했다

:을 다음 조롱 방법은 당신이 원하는 것을하지 않을 수있는 전무를 반환합니다. 내 생각 엔이 다음은 귀하의 경우 더 나은 솔루션입니다 :

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

이 분명히 모의의 복사본을 생성하지 않고, 단순히 모의 자체가 copyWithZone의 호출에서 반환되는 것을 보장 :.

3

그냥 대신 -copy를 호출 하시겠습니까? 그것은 -copyWithZone :을 호출 할 것이고 zone 인자는 완전히 쓸모가 없습니다.