我有两个测试,它们取决于loadRequest方法的成功和失败状态(有些代码需要在委托方法中验证)。
我想验证委托方法中的代码,而不实际打开网络视图晚上而不连接到互联网。我怎样才能实现它?
非常感谢
编辑:
也许是UIWebView的模拟对象?
答案 0 :(得分:0)
只需使用AFNetworking并将其设置为:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
然后您可以知道负载是否成功。如果您的网站始终返回200状态代码,则可以在成功块中添加if / then块。
答案 1 :(得分:0)
OCMock是一个Objective-C模拟框架,它允许完全模拟类,部分模拟对象,以及期望和方法存根。
要模拟UIWebView,您只需要执行
id webViewMock = [OCMockObject mockForClass:[UIWebView class]];
然后你可以设定期望:
[[[webViewMock expect] andDo:^(NSInvocation *) {
// Call your failure or success block
}] someMethodWithArgs:OCMOCK_ANY];
将模拟注入可以拦截正确呼叫的地方。
您还应该致电
[webViewMock verify];
确保调用预期的方法
答案 2 :(得分:0)
我创建了一个符合UIWebViewDelegate的对象并将其设置为UIWebView的委托,代码类似于以下内容:
@interface MyObject : Object <UIWebViewDelegate>
...
@end
...
MyObject myObject = [[MyObject alloc] init];
webView.delegate = myObject;
我可以手动触发委托方法:
[myObject webView:webView didFailLoadWithError:mockError];
[myObject webViewDidFinishLoad:webView];
当然,webView是一个模拟对象。