如何在OCMock 3.4.2中两次对同一类的模拟对象进行局部划分?

时间:2018-11-12 11:27:09

标签: ios objective-c iphone ocmock

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类的两个对象,如上所示。模拟source2对象后,source1Mock停止模拟。如何解决这个问题呢 ?我在OCMock 3.4.1中没有注意到此问题。

1 个答案:

答案 0 :(得分:0)

您的实现是正确的。 OCMock的3.4.1版中有一个bug。该错误已在版本3.4.3中修复-参见release notes

我建议使用宏对方法进行存根,因为它们的编写更加直观且易于阅读。

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