簡介:
- 單元測試是一種通過代碼檢測代碼的開發手段,常用于敏捷開發和測試驅動開發
- 測試驅動開發是 紅燈(有錯誤) / 綠燈(無錯誤) 式的迭代開發
- 代碼檢測通常需要(預先/設想)設置邊界條件,因為UI測試的時候,很多邊界條件不太容易滿足
- 單元測試主要針對 業務邏輯 代碼進行測試!不適合做UI(ViewController)的測試
- MVVM的設計模式,把幾乎所有重要的業務邏輯全部封裝在視圖模型,通過單元測試就很方便檢測條件以及代碼質量!
- 測試覆蓋率,有很多人會討論到底多少代碼應該測試!
- 需要針對業務邏輯的對外開放的函數終點測試! 如果有'局部測試'的業務邏輯小函數 ,可以臨時測試!
- 通常公司的代碼測試覆蓋率從50% - 70%不等
- Xcode的單元測試,還能夠做性能測試
- Xcode 可以利用性能測試,對某一段代碼,重復測試 10 次!
參考:iOS 單元測試--邏輯測試
- Xcode 可以利用性能測試,對某一段代碼,重復測試 10 次!
基本體驗
1. 先創建一個單元測試的項目
創建項目
2. 創建一個Person類,預備代碼
Person.h
Person.m
3. 創建測試文件
找到
創建
4. 文件內容簡單介紹
簡單介紹
5. 創建常規的檢測,如下圖:
常規
我們點擊測試例子,旁邊的小綠按鈕測試一下,發現好像并沒有發生什莫。但是,當我們把下面的打印臺打開,其實它已經做了好多事情。
我們看打印臺,下圖所示:
log打印
單元測試不是靠NSLog來測試,NSLog是程序員用眼睛看的笨辦法。使用 -斷言- 來測試的,提前預判條件必須滿足!
6. 斷言- 來測試
斷言- 來測試
但是,我們進行下面的操作你會發現:(請看下圖)
更改條件,在此驗證
我們在此運行就會發現,如下圖:
年齡不一致
通過這次,測試,我們可以檢測到我們的數據了,和方法內部的有效性。
7. 還原
刪除obj.age++
我們在運行一下,就通過了。
**8. ** 我們創造一個空字典
如下圖:
我們傳入一個空字典@{},在給此行加上斷點,運行,單步走,我們發現
傳入的name = nil;age = 0 (nil);age類型nil,就相當于0,而我們比較的是字符串。nil 是一個指向0的指針,運行到那行就會報錯了,具體如下圖:
圖解
解決:
Person.name = nil
9 把下面這個代碼打開測試一下
第三個
我們一打開,我們便發現,此時崩潰了,我們在看一下,調用堆棧,如下圖:
發現了錯誤
那么,我們該怎么解決呢?
解決
測試
擴展 1
對于測試,我們還可以寫測試代碼,寫完之后,點擊測試按鈕,如下圖:
測試代碼
測試運行后,我們發現出錯了
解決
解決
測試
person模型測試完成
擴展 2