我们一直都是这样使用OCMock的,但是对于一些只读的属性变量好像不行,比如NavigationController之类的,是只读的,set mock one是不生效的。
你有没有遇到过这个棘手的问题,你是如何解决的?任何想法将不胜感激,提前感谢你们这些聪明人。
id mockWebView = [OCMockObject mockForClass:[UIWebView class]];
[[mockWebView expect] loadHTMLString:...];
object_setInstanceVariable(viewController, "webView", mockWebView);
最佳答案
使用部分模拟:
id mockController = [OCMockObject partialMockForObject:viewController];
[[[mockController] stub] andReturn:mockWebView] webView];
[controller doSomethingWithWebView];
如果 viewController 直接访问 ivar,这将不起作用,但如果它通过访问器访问 ivar,它会起作用:self.webview
,这通常是您访问属性的方式。
关于unit-testing - iPhone单元测试OCMock,如何模拟只读变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8433812/