我最近刚升级到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:这会引发异常“另一个模拟已与对象关联”。
有没有办法让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];
}
这真的很烦人......
答案 0 :(得分:1)
查看今天的代码,stopMocking
的实现显式重置了关联的对象(https://github.com/erikdoe/ocmock/blob/dd5599695dcc50afe4d6bdff509ed3cbe389c667/Source/OCMock/OCPartialMockObject.m#L80)。我不知道如何打电话stopMocking
并不能解决问题。你能建立一个OCMock的调试版本,并在上面突出显示的行上设置一个断点,看看它是否被调用?