2014-04-02 39 views
0

我有兩個測試,這取決於loadRequest方法的成功和失敗狀態(一些代碼要在委託方法中進行驗證)。如何控制UIWebView的loadRequest的加載結果?

我想驗證委託方法中的代碼,而不需要在沒有連接到互聯網的情況下實際打開Web視圖。我怎樣才能實現它?

非常感謝

編輯:

也許對UIWebView的模仿對象?

+0

這是關於單元測試的問題嗎? – michaels

+0

@ michael是的,它是關於我的。 –

回答

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是一個嘲弄的對象。

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塊。

+0

謝謝Mikael。 AFNetworking有一個類別UIWeiView + AFNetworking可以完成你的代碼工作,但它不適合這種情況。其實我想手動控制響應,這樣即使不連接互聯網,我也可以測試代理方法。 –

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]; 

,以確保預期的方法調用

+0

OCMock很棒,但是我選擇了Kiwi來測試我的代碼。我嘲笑一個符合UIWebViewDelegate協議的對象,而不是嘲笑UIWebView。然後我將委託消息發送到客戶端,以便我可以手動控制結果。 –

相關問題