我试图在我的一个单元测试中模拟一个Singleton类。我创建mock的方式如下:
MySingletonController *mockController = OCMClassMock([MySingletonController class]);
OCMStub([MySingletonController sharedController]).andReturn(mockController);
我得到的完整错误是:
Did not record an invocation in OCMStub/OCMExpect/OCMReject.
Possible causes are:
- The receiver is not a mock object.
- The selector conflicts with a selector implemented by OCMStubRecorder/OCMExpectationRecorder. (NSInternalInconsistencyException).
需要提及的重要一点是,共享实例并不是实例化类的东西,它只是返回一个变量。该变量在nib加载期间的init(发生)中被赋值。但我真的怀疑这与问题有关。
我不完全清楚是什么导致了我所看到的OCM
错误。
第二行如下:
OCMStub([mockController sharedController]).andReturn(mockController);
问题是我如何声明OCMStub
。我的sharedController
方法是一个class
方法。然后需要对OCMStub
进行不同的声明。
MySingletonController *mockController = OCMClassMock([MySingletonController class]);
OCMStub(ClassMethod([(id)mockController sharedController])).andReturn(mockController);
按上述方法修改代码后,测试开始正常工作。