2015-04-22 71 views
1

我想用XCTest使用mock進行單元測試。我從ocmock.org下載了OCMock 3.1.2。我嘗試新的語法,如下所示:http://ocmock.org/reference/#stubing-methodsOCMStub中未識別的方法`返回'

但是,Xcode 6.3無法識別方法andReturn,請參見截圖。它認可的唯一方法是andForwardToRealObject。當我用命令點擊這個方法時,它打開文件OCMStubRecorder.h,其中在接口andReturn中定義的是!爲什麼Xcode不能識別它?

Screenshot Xcode not recognizing andReturn

如果我反正鍵入它,它有時由編譯器識別,有時不是。

回答

0

不知道爲什麼,但至少對我來說我不能使用andReturn通過點符號出於某種原因。如果你要這樣做[OCMStub([mock_db_helper getArticleForArticleId:1]) andReturn:<mock data>];是否有效?

0

它可能與this Nocilla issue中解釋的Nocilla相沖突有關。你可以重新映射OCMockandReturnOCAndReturn像這樣在您的前綴頭:

#define OCandReturn(aValue) _andReturn(({ __typeof__(aValue) _val = (aValue); NSValue *_nsval = [NSValue value:&_val withObjCType:@encode(__typeof__(_val))]; if(OCMIsObjectType(@encode(__typeof(_val)))) { objc_setAssociatedObject(_nsval, "OCMAssociatedBoxedValue", *(__unsafe_unretained id *) (void *) &_val, OBJC_ASSOCIATION_RETAIN); } _nsval; })) 

您的代碼將隨即成爲:

OCMStub([mock_db_helper getArticleForArticleId:1]).OCAndReturn(...); 

這不幸的是必要的需要,如果OCMock更新它的宏觀但會避免符號重複問題。