OCMock 不会模拟通过 Cocoapods 包含的 class

OCMock does not mock class included via Cocoapods

我正在使用 OCMock 模拟 DataFetcher class:

id dataFetcherMock = OCMClassMock([DataFetcher class]);
OCMStub([dataFetcherMock fetchSetupForCompany:[OCMArg any]
                                   completion:[OCMArg any]]).andCall(self, @selector(fetchSetupForCompany:completion:));

当 DataFetcher 是项目的一部分时,它工作正常。但是后来我们将 DataFetcher 移到了一个私有的 Cocoapods 上。嘲笑停止了工作。 andCall 中定义的方法再也没有调用过。

OCMock 可以用来模拟通过 cocoapods 添加的 classes 吗?我怎样才能让它发挥作用?

我发现问题出在我在 pod 文件中包含测试目标的方式上。我拥有的是:

target 'Service' do
    pod 'MTDates'
    pod 'libextobjc'
    pod 'DataFetcher'

    target 'ServiceTests' do
        pod 'OCMock'
        pod 'OHHTTPStubs'
    end
end

这导致 DataFetcher class 链接到两个目标,因此它在运行时被复制。

我改成了

target 'Service' do
    pod 'MTDates'
    pod 'libextobjc'
    pod 'DataFetcher'
end

target 'ServiceTests' do
    pod 'OCMock'
    pod 'OHHTTPStubs'
end

这解决了问题。