Ios OCMStub中无法识别方法“andReturn”
我想用XCTest进行单元测试,使用mock。我从OCMock.org下载了OCMock 3.1.2。我尝试新语法,如下所述: 但是,Xcode 6.3无法识别方法Ios OCMStub中无法识别方法“andReturn”,ios,ocmock,xcode6.3,Ios,Ocmock,Xcode6.3,我想用XCTest进行单元测试,使用mock。我从OCMock.org下载了OCMock 3.1.2。我尝试新语法,如下所述: 但是,Xcode 6.3无法识别方法andReturn,请参见屏幕截图。它识别的唯一方法是和ForwardToRealObject。当我命令单击此方法时,它将打开文件OCMStubRecorder.h,其中在界面中定义了andReturn!为什么Xcode不能识别它 如果我仍然键入它,编译器有时会识别它,有时则不会 不知道为什么,但至少对我来说,由于某种原因,我不能通
andReturn
,请参见屏幕截图。它识别的唯一方法是和ForwardToRealObject
。当我命令单击此方法时,它将打开文件OCMStubRecorder.h
,其中在界面中定义了andReturn
!为什么Xcode不能识别它
如果我仍然键入它,编译器有时会识别它,有时则不会 不知道为什么,但至少对我来说,由于某种原因,我不能通过点符号使用
andReturn
。如果要执行[OCMStub([mock_db_helper getArticleForArticleId:1])和返回:代码>有效吗?这可能与中解释的碰撞有关。您可以在前缀标题中将OCMock
的重新映射到OCAndReturn
,如下所示:
#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
的宏发生更改,则需要对其进行更新,但这将避免符号重复问题