Модульное тестирование iPhone OCMock, как смоделировать переменные только для чтения - PullRequest
3 голосов
/ 08 декабря 2011

Мы всегда используем OCMock следующим образом, но, похоже, он не работает для некоторых переменных свойств только для чтения, таких как NavigationController и т. Д., Он доступен только для чтения, установка фиктивного значения не действует.

Вы когда-нибудь сталкивались с этой сложной проблемой, как вы ее решаете? Любая идея будет оценена, спасибо заранее умные ребята.

id mockWebView = [OCMockObject mockForClass:[UIWebView class]];
[[mockWebView expect] loadHTMLString:...];
object_setInstanceVariable(viewController, "webView", mockWebView);

1 Ответ

4 голосов
/ 09 декабря 2011

Использовать частичный макет:

id mockController = [OCMockObject partialMockForObject:viewController];
[[[mockController] stub] andReturn:mockWebView] webView];

[controller doSomethingWithWebView];

Это не будет работать, если viewController обращается к ivar напрямую, но будет, если он получает доступ к ivar через аксессор: self.webview, как правило, вы должны обращаться к свойствам.

...