Я хочу заглушить [[NSProcessInfo processInfo] operatingSystemVersion]
, чтобы взять любую версию ОС.Можно ли заглушить NSProcessInfo с помощью OCMock?
id processInfoMock = OCMClassMock([NSProcessInfo class]);
[OCMStub([processInfoMock operatingSystemVersion]) andReturnValue:NULL];
NSOperatingSystemVersion osVersion = [[NSProcessInfo processInfo] operatingSystemVersion];
Но версия операционной системы для iOS-симулятора возвращается. Можно ли заглушить методы NSProcessInfo? И, уместно ли загромождать классы Foundation?
[ОБНОВЛЕНО] С советами Эрика, вопрос решается. Мне нужно было заглушить метод класса processInfo
для возврата экземпляра mock из NSProcessInfo. Вот тест обходили код:
// Prepare fakeVersion instead of NULL.
NSOperatingSystemVersion fakeVersion = {0,0,0};
// Mock NSProcessInfo.
id processInfoMock = OCMClassMock([NSProcessInfo class]);
// Stub processInfo class method to return the mock instance.
[OCMStub([processInfoMock processInfo]) andReturn:processInfoMock];
// Stub operatingSystemVersion instance method to return fakeVersion.
[OCMStub([processInfoMock operatingSystemVersion]) andReturnValue:OCMOCK_VALUE(fakeVersion)];
// Another solution using OCMPartialMock.
// Partial mock for NSProcessInfo instance.
id processInfo = [NSProcessInfo processInfo];
id processInfoPartialMock = OCMPartialMock(processInfo);
// Stub operatingSystemVersion instance method to return fakeVersion.
[OCMStub([processInfoPartialMock operatingSystemVersion]) andReturnValue:OCMOCK_VALUE(fakeVersion)];
Спасибо @ erik-doernernburg за ваш комментарий. Как вы упомянули, проблема заключалась в том, что мне нужно было заглушить метод 'processInfo' класса' NSProcessInfo' для возврата экземпляра mock. Я обновлю свой вопрос, чтобы добавить тестовый код. – Keita
О синтаксисе andReturn по какой-то причине недоступно в моем Xcode. Он предлагает метод _andReturn, который ожидает параметр NSValue. Я использую OCMock 3.2. Вы знаете, что может быть проблемой? – Keita