如何在 OCMock 3.4.2 中两次部分模拟相同 class 的对象?

How to partial mock objects of the same class twice in OCMock 3.4.2?

EKSource *source1 = [[EKSource alloc] init];
EKSource *source2 = [[EKSource alloc] init];

id source1Mock = OCMPartialMock(source1);
[[[source1Mock stub] andReturnValue:@(EKSourceTypeBirthdays)] sourceType];

id source2Mock = OCMPartialMock(source2);
[[[source2Mock stub] andReturnValue:@(EKSourceTypeCalDAV)] sourceType];

NSLog([source1 sourceType]); # Getting EKSourceTypeLocal instead of EKSourceTypeBirthdays
NSLog([source2 sourceType]); # Getting EKSourceTypeCalDAV. Expected behaviour.

我正在尝试部分模拟 EKSource class 的两个对象,如上所示。模拟 source2 对象后,source1Mock 停止模拟。如何解决这个问题呢 ?我在 OCMock 3.4.1 中没有注意到这个问题。

您的实施是正确的。有一个 bug in version 3.4.1 of OCMock. The bug was fixed in version 3.4.3 - see release notes.

我建议使用宏来存根方法,因为它们编写起来更直观,也更容易阅读。

例如OCMock([source1 sourceType]).andReturn(@(EKSourceTypeBirthdays))