我有兩個測試,這取決於loadRequest方法的成功和失敗狀態(一些代碼要在委託方法中進行驗證)。如何控制UIWebView的loadRequest的加載結果?
我想驗證委託方法中的代碼,而不需要在沒有連接到互聯網的情況下實際打開Web視圖。我怎樣才能實現它?
非常感謝
編輯:
也許對UIWebView的模仿對象?
我有兩個測試,這取決於loadRequest方法的成功和失敗狀態(一些代碼要在委託方法中進行驗證)。如何控制UIWebView的loadRequest的加載結果?
我想驗證委託方法中的代碼,而不需要在沒有連接到互聯網的情況下實際打開Web視圖。我怎樣才能實現它?
非常感謝
編輯:
也許對UIWebView的模仿對象?
我做了符合UIWebViewDelegate並將其設置爲一個UIWebView的委託一個對象,代碼類似於如下:
@interface MyObject : Object <UIWebViewDelegate>
...
@end
...
MyObject myObject = [[MyObject alloc] init];
webView.delegate = myObject;
而且我可以手動觸發委託方法:
[myObject webView:webView didFailLoadWithError:mockError];
[myObject webViewDidFinishLoad:webView];
當然,webView是一個嘲弄的對象。
只需使用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塊。
謝謝Mikael。 AFNetworking有一個類別UIWeiView + AFNetworking可以完成你的代碼工作,但它不適合這種情況。其實我想手動控制響應,這樣即使不連接互聯網,我也可以測試代理方法。 –
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];
,以確保預期的方法調用
OCMock很棒,但是我選擇了Kiwi來測試我的代碼。我嘲笑一個符合UIWebViewDelegate協議的對象,而不是嘲笑UIWebView。然後我將委託消息發送到客戶端,以便我可以手動控制結果。 –
這是關於單元測試的問題嗎? – michaels
@ michael是的,它是關於我的。 –