2013-07-19 79 views
0

我試圖在我的項目中運行MKNetworkKit,它似乎很好。然後我創建了一個單元測試項目,並調用引擎發出一些請求(使用MkNetworkOperation)。我沒有明顯的錯誤,但completionhandler塊永遠不會被調用,錯誤塊也是如此。涉及Mknetworkkit的iOS寫入單元測試

我檢查了我的單元測試設置,沒有明顯的錯誤,整個事情都「跑」了。我只是沒有得到任何迴應。如果我切換並在我的主項目中執行此操作,它將起作用。

我還爲單元測試項目添加了所有必要的框架。

我注意到的一件事是可達性消息打印出來的情況下工作,但沒有爲沒有的情況下。

關於發生了什麼事情的任何線索?

回答

1

聽起來像你需要一個信號燈或類似的東西阻止執行,直到請求返回。單元測試運行直到方法結束。如果他們在沒有錯誤的情況下達到了方法的終點,那麼他們是成功的。自您使用MKNetworkKit以來,服務器請求是異步的,因此在請求完成之前方法的結束會被命中。我找到了一個輔助類來幫助進行單元測試。我會嘗試再次找到它,並用一些示例代碼鏈接到它。

發現:http://www.touch-code-magazine.com/unit-testing-for-blocks-based-apis/

所以已經有一段時間,因爲我寫這些測試。我很確定這會起作用,但你可能需要調整它。

-(void)tests { 
    //setup 
    NSString *key = @"myTestKey"; 

    //test 
    STAssertNoThrow(
     [API resetPassword:@"[email protected] callback:^(NSDictionary *result) { 

     STAssertNotNil(result, @"reset pass response was nil"]); 
     [[TestSemaphor sharedInstance] lift:key]; 
    } error:^(NSDictionary *error) { 

     STFail(@"reset password failed: %@", error.description); 
     [[TestSemaphor sharedInstance] lift:key]; 
    }], @"reset password failed"); 

    [[TestSemaphor sharedInstance] waitForKey:key]; 
} 
+0

是的,那有效。謝謝! – kawingkelvin