3

我们一直都是这样使用OCMock的,但是对于一些只读的属性变量好像不行,比如NavigationController等,是只读的,设置mock一个不生效。

你有没有遇到过这个棘手的问题,你是如何解决的?任何想法将不胜感激,在此先感谢各位聪明人。

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

1 回答 1

4

使用部分模拟:

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

[controller doSomethingWithWebView];

如果 viewController 直接访问 ivar,这将不起作用,但如果它通过 accessor: 访问 ivar 则它将起作用self.webview,这通常是您应该访问属性的方式。

于 2011-12-09T19:13:47.793 回答