2016-02-02 2 views
1

Я хочу заглушить [[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)]; 

ответ

2

Вы должны убедиться, что макет фактически используется гася метод processInfo класса. Это показано в разделе «Создание заглушек для методов экземпляра и класса» на главной странице веб-сайта OCMock.

Кстати, зачем смешивать разные синтаксические стили? Почему бы не просто написать

OCMStub([processInfoMock operatingSystemVersion]).andReturn(NULL); 
+0

Спасибо @ erik-doernernburg за ваш комментарий. Как вы упомянули, проблема заключалась в том, что мне нужно было заглушить метод 'processInfo' класса' NSProcessInfo' для возврата экземпляра mock. Я обновлю свой вопрос, чтобы добавить тестовый код. – Keita

+0

О синтаксисе andReturn по какой-то причине недоступно в моем Xcode. Он предлагает метод _andReturn, который ожидает параметр NSValue. Я использую OCMock 3.2. Вы знаете, что может быть проблемой? – Keita

Смежные вопросы