How To Test Blocks When Making Unit Tests For Objective-C

Gist Code: https://gist.github.com/2976465
當我們有個 Method 是使用了 Blocks 的方式來網路呼叫,這段過程不知道多久才會完成,有可能很快,有可能要等很久。這樣的過程在 Unit Test 方面是一直往下跑,所以結果沒出來我們也無法加入 Assertion 來確定結果是不是我們預期的。

- (void)loadMore:(BOOL)more didFinishLoad:(requestDidFinishLoadBolck)requestDidFinishLoad
   loadWithError:(requestLoadWithErrorBlock)requestLoadWithError

我們可以開一個 NSRunLoop 來輔助,先宣告一個 BOOL done 來控制影響後面我們的 Run Loop 的執行狀況。但是在 while 迴圈裡面也是有個上限,透過 usleep() 來控制要等待多少 microseconds 。當整個等待架構好之後,回到主要要測試的程式,在最後結果的 finish load 和 load with error 裡面都補上 loading done 的轉換成 YES,如此一來提早執行完我們也可以將等待的 Run Loop 結束掉。

以上透過這樣方式即可完成我們在程式是需要網路呼叫的測試了。程式使用 Blocks 方式撰寫也不成問題。相關文章:使用 SenTestCase 為後續整合更快速使用 SenTestCase 為 Continuous Integration 之路更踏實

Comments