诸如andReturn和 之类的全部操纵andPost都可以链接
// 模仿对象将发布关照并返回值OCMStub([mock someMethod]).andPost(aNotification).andReturn(aValue);4.2.10、转发给真正的对象/类 Forwarding to the real object / class
OCMStub([partialMockPerson addChilden:startsWith(@"foo")]);4.5、模仿类方法 Mocking class methods
4.5.1、存根类方法 Stubbing class methods
id mockPerson = OCMClassMock([MOPerson class]);OCMStub([mockPerson mo_className]).andReturn(@"XXMOPerson");4.5.2、消除类和实例方法的歧义 Disambiguating class and instance methods
[partialMockPerson mo_className];OCMVerify([partialMockPerson mo_className]);4.6.3、规复对象 Restoring the object
[partialMockPerson stopMocking];4.7、严格的模仿和渴望 Strict mocks and expectations
4.7.1、设置渴望-运行-验证 Expect-run-verify
id mockPerson = OCMClassMock([MOPerson class]);OCMExpect([mockPerson addChilden:[OCMArg isNotNil]]);[mockPerson addChilden:[MOPerson new]]; // 只要有一次不为nil,就通过了验证![mockPerson addChilden:nil];OCMVerifyAll(mockPerson);4.7.2、严格的模仿和快速失败 Strict mocks and failing fast
id strictPerson = OCMStrictClassMock([MOPerson class]);[strictPerson mo_className]; // 没有渴望该方法的调用,以是会测试失败4.7.3、存根和渴望 Stub actions and expect
也可以在渴望的情况下使用andReturn、andThrow等。这将在调用方法时运行存根操纵,并在验证时确保该方法被实际调用
OCMExpect([strictPerson mo_className]).andReturn(@"instance_MOPerson");OCMExpect([strictPerson mo_className]).andThrow([NSException ...]);[strictPerson mo_className];OCMVerifyAll(strictPerson);4.7.4、耽误验证 Verify with delay
OCMExpect([strictPerson mo_className]);[strictPerson mo_className];OCMVerifyAllWithDelay(strictPerson, 4.0); // NSTimeInterval, 通常会在满足预期后立即返回4.7.5、按次序验证 Verifying in order
4.9.1、快速失败的通例模仿 (必要OCMock3.3) Failing fast for regular (nice) mocks
strict模仿:调用未存根的方法会抛出非常
通例模仿:只是返回默认值;可以为函数设置快速失败:
id mockPerson = OCMClassMock([MOPerson class]);OCMReject([mockPerson mo_className]);在这种情况下,模仿将担当全部方法,除了mo_className,如果调用该函数,则将引发非常。
4.9.2、重新验证失败后快速抛出非常 Re-throwing fail fast exceptions in verify all
在快速失败模式下,非常大概不会导致测试失败(如:当方法的调用堆栈未在测试中竣事时)
OCMerifyAll调用时,快速失败非常将重新引发,可以确保检测到来自关照等不必要的调用
4.9.3、存根创建对象的方法 Stubbing methods that create objects
[mockPerson stopMocking];[partialMockPerson stopMocking];4.9.6、禁用短语法 Disabling short syntax
禁用 没有前缀的宏:ClassMethod()、atLeast()、…
用有前缀的宏:OCMClassMethod()、OCMAtLeast()、…
4.9.7、克制为特定类创建模仿 (必要OCMock3.8) Stopping creation of mocks for specific classes
一些框架在运行时动态更改对象的类。OCMock如许做是为了实现部分模仿,而且Foundation框架将更改类作为(KVO)机制的一部分。
如果不细致和谐,大概会导致不测举动或crash。
OCMock知道KVO,并小心克制与之发生辩论
对于别的框架,OCMock仅提供了一种选择退出模仿以免发生不测举动的机制
+ (BOOL)supportsMockingNSString **)reason { *reason = @"Don't want to be mocked." return NO;}通过实现上面的方法,一个类可以选择不被Mock。当开发职员实验为此类创建模仿步伐时,将引发非常,表明问题说在该方法在单独调用中返回差异的值是可以担当的,这使它在运行时对特定条件做出反应。如果该方法为reason赋值,返回值将被忽略。对于全部未实现此方法的类,OCMock假定可以担当Mock
4.9.8、查抄部分Mock (必要OCMock3.8) Checking for partial mock
id partialMockForString = OCMPartialMock(anObject);OCMStub([partialMock class]).andReturn(someOtherClass); // will not work无法模仿许多核心运行时方法。包罗:init、class、methodSignatureForSelector:、forwardInvocation:、respondsToSelector等等
4.10.5、NSString和NSArray上的类方法无法存根或验证
id mock = OCMClassMock([NSObject class]);/* run code under test, which calls awakeAfterUsingCoder: */OCMVerify([mock awakeAfterUsingCoder:[OCMArg any]]); // still fails不大概使用在 NSObject 中实现的方法或其上的种别举行运行后验证。
在某些情况下,可以对方法举行存根,然后对其举行验证。
当方法在子类中被覆盖时,可以使用运行后验证
4.10.8、无法验证核心 Apple 类中的私有方法
UIWindow *window = /* get window somehow */id mock = OCMPartialMock(window);/* run code under test, which causes _sendTouchesForEvent: to be invoked */OCMVerify([mock _sendTouchesForEvent:[OCMArg any]]); // still fails不大概在核心 Apple 类中使用私有方法运行后验证。
具体来说,在以 NS 或 UI 作为前缀的类中,全部带有下划线前缀和/或后缀的方法。
在某些情况下,可以对方法举行存根,然后对其举行验证
4.10.9、运行后验证不能使用耽误