如何控制UIWebView的loadRequest的加载结果?

时间:2014-04-02 13:04:13

标签: ios cocoa unit-testing uiwebview

我有两个测试,它们取决于loadRequest方法的成功和失败状态(有些代码需要在委托方法中验证)。

我想验证委托方法中的代码,而不实际打开网络视图晚上而不连接到互联网。我怎样才能实现它?

非常感谢

编辑:

也许是UIWebView的模拟对象?

3 个答案:

答案 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是一个模拟对象。