XCode 的 unit test
學習 test、寫 test、維護 test 和開發時執行 test 的等待時間都有成本。若使用的成本太高, 寫起來就更不划算了。初步使用 XCode 內建的 OCUnit 後, 覺得用起來不太划算。沒有 Python 和 Java 那種流暢的感覺。看了別人的討論, third-party unit test framework 還未出現救世主, 期待 XCode 5.x 會不會有友善的環境。
除單獨執行某組 test 或從上回失敗的 test 開始執行這類基本需求外, Python/Java 各有一大好處:
- Python + nosetests: 可以自行搜集目錄下的 unit test
- Java + Eclipse: 可以 100% 直線式進行 TDD: 寫 test 呼叫目標 class 和 method -> 用 Eclipse 產生空的目標 class 和對應的 method -> 實作 method。這種寫法頗痛快的
而 XCode + OCUnit 令人意外的只能執行全部 test。介面的部份待用久一點後再來評論。
unit test 與非同步操作
unit test 測到如 NSURLConnection 的非同步操作時, 記得在 unit test 裡呼叫
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]
這樣才有分配時間執行非同步操作, 不要傻傻的等, 想說怎麼 NSURLConnection 的 callback 都沒被呼叫到? 細節見The Run Loop In Cocoa Unit Tests。
2013-01-25 更新
今天翻閱Test-Driven iOS Development (Developer's Library) 才知道在可以選擇要執行的 test 項目, 這本書薄又滿有料的, 很快就可以翻完。長期開發 iOS 又對 TDD 有興趣的話, 看看應該會有幫助。依我目前作的事來說, 時間先花在熟悉 XCode 和 framework 會比較划算就是了。
沒有留言:
張貼留言