2013-02-05 34 views
0

我掙扎寫一個API包裝單元測試與像單元測試NSURLConnection的sendAsynchronousRequest與OCMockito

- (void)publish:(id<MyCustomRequest>)aRequest completionHandler:(void (^)(id<MyCustomResponse>, NSError *)) completionBlock 

其中要求發動機罩下此方法的接口:

NSURLConnection sendAsynchronousRequest:queue:completionHandler 

我不不想使用委託,因爲暴露的API更適合sendAsynchronousRequest方法(並且不需要每個請求單獨的累加器對象)。此外,我正在使用OCMockito嘲笑代碼的其餘部分,它不支持部分模擬或模擬類方法。

是否有任何其他測試技術可以測試此功能?是否有必要使用委託?

+0

OCMockito支持類方法。 –

+0

哦,真的嗎?我如何使用OCMockito來模擬類方法?我沒有在自述文件或示例中看到它。 –

+0

示例:'Class mockStringClass = mockClass([NSString class]);' –

回答

0

使用基於委託的API。我意識到這是更多的代碼,但便利的API顯然不足以滿足您的需求(即可與OCMockito嬉戲)。此外,不要擔心分配每個輔助請求的「開銷」。我感到非常自信,憑藉您的調用+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:],系統框架中會有數十個對象分配在後臺;你不應該擔心。也就是說,一個對象可以是多個請求的委託,所以你不一定有多個請求。

+0

今天早上嘗試了基於委託的API,只要讓它立即在主隊列上啓動,它就能正常工作。當我使用新的隊列時,還有其他事情正在進行(startImmediately:NO,setDelegateQueue,start)。但我想這是另一個問題。 –

+0

這裏不要過於「明顯」,但是在初始化它之後是否使用'scheduleInRunLoop:forMode:'在runloop上安排它?因爲否則它永遠不會啓動,所以你的委託方法永遠不會被調用。 – ipmcc

相關問題