【发布时间】:2016-03-09 21:31:07
【问题描述】:
我最近刚刚升级到 XCode 7,迫使我升级 OCMock 以便我支持 x64 架构。显然,在 OCMock 中进行了更改,它不允许重新模拟以前模拟的对象——换句话说,我有一个辅助方法可以执行以下操作:
-(MyObject *)getObject {
Factory *factory = [self.dependencyInjector getInstance:factory];
id mockFactory = [OCMockObject partialMockForObject:factory];
[[[mockFactory stub] andReturn:@"important-value"] thing];
return [[MYObject alloc] initWithFactory:mockFactory];
}
这以前工作得很好,但显然 OCMockObject 发生了变化,不允许重新模拟已经模拟的对象。由于注入器返回的工厂对象实际上是一个单例对象,因此对 getObject 方法的后续调用会多次调用 partialMockForObject: ,这会引发异常“Another mock is already associated with object”。
有什么方法可以让 OCMock 不报错?在模拟对象之前,我尝试在对象上调用 stopMocking,但这并不能解决此问题。解决它的唯一方法是执行以下操作:
-(MyObject *)getObject {
if (!self.mockFactory) {
Factory *factory = [self.dependencyInjector getInstance:factory];
id mockFactory = [OCMockObject partialMockForObject:factory];
[[[mockFactory stub] andReturn:@"important-value"] thing];
self.mockFactory = mockFactory;
}
return [[MYObject alloc] initWithFactory:self.mockFactory];
}
这真的很烦人……
【问题讨论】: