未在 OCMStub/OCMExpect/OCMReject 中记录调用

Did not record an invocation in OCMStub/OCMExpect/OCMReject

我正试图在我的一个单元测试中模拟单例 class。我创建模拟的方式是这样的:

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).

需要提及的一件重要事情是共享实例不是实例化 class 的东西,它只是 returns 一个变量。该变量是在 nib 加载期间的初始化(发生)期间分配的。但我真的怀疑这与问题有关。

我不完全知道是什么导致了我看到的 OCM 错误。

第二行应该如下:

OCMStub([mockController sharedController]).andReturn(mockController);

问题是我如何声明 OCMStub。我的 sharedController 方法是 class 方法。然后需要为 OCMStub.

声明不同的内容
MySingletonController *mockController = OCMClassMock([MySingletonController class]);
OCMStub(ClassMethod([(id)mockController sharedController])).andReturn(mockController);

按上述方式更改我的代码后,测试开始正常运行。