1、為什麼要進行單元測試?
答:單元測試是為了避免你的app變成充滿bug的軟體,讓我們在開發過程中能更好的發現缺陷,提高代碼品質,也能保證在代碼重構時及時發現改動帶來的問題。
2、單元測試應該測什麼?
答:1)核心功能:模型類和方法,以及它們和控制器的互動
2)最常用的UI操作
3)邊際條件
4)bug修複
3、單元測試需要遵循的原則是什麼?
答:FIRST原則--測試的最佳實踐,遵循FIRST原則會讓你的測試更加清晰有用
1)Fast:測試的運作速度要快,這樣人們就不介意你運作它們
2)Independent/Isolated:一個測試不應當依賴于另一個測試
3)Repeatable:同一個測試,每次都應該獲得相同的結果。外部資料提供者和并發問題會導緻間歇性的出錯
4)Self-validating:測試應當是完全自動化的,輸出結果要麼是pass要麼是fail,而不是依靠程式員地日志檔案的解釋
5)Timely:理想情況下,測試的編寫,應當在編寫要測試的産品代碼之前
4、單元測試的有點有哪些?
答:1)使開發人員更自信
2)代碼不會退化。不會因為改了bug而導緻另外的bug
3)在有良好的單元測試情況下,可以放心的進行代碼重構
4)良好的單元測試,本身就是使用說明,有時比文檔更有用
目前很多的開源庫、開源項目都加入了單元測試,例如swift版本的AFN--Alamofire,就編寫了大量的測試代碼,目前單元測試主要分為TDD和BDD兩種思維模式。

5、什麼是TDD?
答:TDD是 Test Drive Development,指的是測試驅動開發,相對于普通思維模式來說,是一種比較極端的做法我們一般都是先編寫産品代碼,在寫測試代碼,而TDD恰好相反,其思想是先寫測試代碼,然後再編寫相應的産品代碼。
TDD一般遵循 red->green->refactor 的步驟,即(報錯->通過->重構),因為是先寫了測試代碼,而還未添加産品代碼,是以編譯器會給出紅色報警,當把相應的産品代碼添加完善後,并讓單元測試用例通過測試,通過的狀态為綠色,如此反複直到各種邊界和測試都進行完畢,此時我們就可以得到一個穩定的産品,是以可以大膽的對産品代碼進行重構,隻要保證項目最後是綠色狀态,就說嘛重構的代碼沒問題。
TDD的過程,類似于腳本語言的互動式程式設計,寫幾行代碼,就可以檢查運作結果,如果結果有誤,則要把最近的代碼充血,知道單元測試結果正确為止。
6、什麼是BDD?
答:BDD是Behavior Drive Development ,指的是行為驅動開發,常用于靈活開發中使用的測試方法,其主要是為了解決XCTest蘋果官方測試架構測試時難以mock和stub的問題。
BDD提倡使用Given...When...Then 這種類似自然語言的描述來編寫測試代碼,在objc中,現在比較流行的BDD架構有specta、Kiwi、ceder,github上start較多的是Kiwi,在swift中,專用的 BDD 測試架構是Quick和Sleipnir。
例如Alamofire中下載下傳的測試:
7、什麼是Stub?
答:Stub是指人為地讓一個對象對某個方法傳回我們事先規定好的值。
Stub運用的主要場景是你需要和别的開發人員協同開發時,别人的子產品尚未完成,而你的子產品需要用到别人的子產品,這時就需要Stub。例如,後端的接口未完成,你的代碼已經完成了,Stub可以僞造一個調用的傳回。
ojbc下可以使用OHHTTPStubs來僞造網絡的資料傳回。swift下,仍要手動寫stub。
8、什麼是Mock?
答:Mock是一個非常容易和stub混淆的概念,簡單來說,我們可以将Mock看做是一種更全面和更智能的Stub。