OCMock失败“另一个模拟已与XCode 7中的XCTest关联”

时间:2015-12-04 20:37:29

标签: xctest ocmock

我最近刚升级到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];
}

这真的很烦人......

1 个答案:

答案 0 :(得分:1)

查看今天的代码,stopMocking的实现显式重置了关联的对象(https://github.com/erikdoe/ocmock/blob/dd5599695dcc50afe4d6bdff509ed3cbe389c667/Source/OCMock/OCPartialMockObject.m#L80)。我不知道如何打电话stopMocking并不能解决问题。你能建立一个OCMock的调试版本,并在上面突出显示的行上设置一个断点,看看它是否被调用?