2013-01-20 68 views
3

我使用OCMock來幫助測試驅動開發我正在爲使用Xcode的iPad應用程序進行測試。我有測試這樣的代碼:編譯器混淆模擬對象

id mock = [OCMockObject mockForProtocol:@protocol(SomeProtocol)]; 
Vector direction = { 1.0f, 2.0f, 3.0f }; 
[[mock expect] setDirection:direction]; 

當我嘗試編譯,我得到警告和錯誤是這樣的:

warning: multiple methods named 'setDirection:' found

error: sending'Vector' to parameter of incompatible type
'UISwipeGestureRecognizerDirection' (aka 'enum UISwipeGestureRecognizerDirection')

顯然編譯器不能確定什麼類型的對象的模擬應該是。我不知道如何指定它應該處理來自SomeProtocol協議的setDirection方法,而不是來自另一個類的setDirection方法。

可以做些什麼來使這樣的測試案例成功?

回答

6

排位賽與鑄造模擬將消除歧義:

[(id<SomeProtocol>)[mock expect] setDirection:direction]; 
2

對於OCMock 3現代語法:

id protocolMock = OCMProtocolMock(@protocol(MYProtocol)); 
OCMExpect([(id <MYProtocol>)protocolMock ambiguousMethod]);