走進iOS單元測試世界 – iPhone手機開發 iPhone軟體開發教學課程

摘要

今天給大傢著重介紹一下單元測試,很多人可能沒有聽過單元測試或者是隻是聽說過,而沒有實際的去實踐過,沒有關系,今天就給大傢普及普及這方面的知識,並且帶著大傢進行實踐,切身體驗一下單元測試好處.

如果一個移動端的開發人員對單元測試不去重視他,這種開發人員往往表現一種“無知的自信”,總覺得自己寫的代碼質量很高,直到一次次蟲子(Bug)把自己咬的頭破血流時,出現重大問題時,才發現原來自己的代碼已經到瞭剪不斷理還亂的狀態,而每一次修改一個bug,都需要走一遍“墨鏡迷宮”

 

這裡寫圖片描述

 

所以我們開發人員有必要對單元測試重視起來,才不會因為程序出瞭問題而不知所措.

另外還有很多人知道單元測試或者寫出瞭單元測試,但是就是寫瞭一個方法,上面標註瞭一個[Test]屬性而已,甚至很多的人單元測試上面標註的是[IgnoreTest],這些都是不夠的,都是比較膚淺的.所以今天帶著大傢走進單元測試的世界裡.

 

這裡寫圖片描述

 

在正式介紹單元測試,大傢要明白這樣幾個概念,如下:

一 單元測試是什麼?

單元測試是開發者編寫的一小段代碼,用於檢驗被測代碼中的一個很明確的功能是否正確。通常而言,一個單元測試是用於判斷某個特定條件(或者場景)下某個特定函數的行為。

執行單元測試,是為瞭證明某段代碼的行為確實和開發者所期望的一致。因此,我們所要測試的是規模很小的、非常獨立的功能片段。通過對所有單獨部分的行為建立起信心。然後,才能開始測試整個系統。

二 單元測試的好處在哪裡?

 

這裡寫圖片描述

 

1. 單元測試使工作完成的更輕松

2. 經過單元測試的代碼,質量能夠得到保證

3. 單元測試發現的問題很容易定位。

4. 修改代碼犯的錯,經過單元測試易發現

5. 單元測試可以在早期就發現性能問題

6. 單元測試使你的設計更好

7. 大大減少花在調試上的時間

三 如果不進行單元測試會造成什麼後果?

1. 代碼會暗藏很多缺陷,健壯性不強

2. 系統測試發現的缺陷比較難以定位

3. 為瞭修復缺陷而修改代碼,很可能會不小心犯錯,但是又不能及時發現這些新錯誤。

4. 性能問題很難定位,性能優化的時間很難控制。

四 單元測試準則有哪些

1. 保持單元測試小巧, 快速

理論上, 任何代碼提交前都應該完整跑一遍所有測試套件. 保持測試代碼執行迅捷能夠縮短迭代開發周期.

2. 單元測試應該是全自動且無交互

測試套件通常是定期執行的, 執行過程必須完全自動化才有意義. 需要人工檢查輸出結果的測試不是一個好的單元測試.

3. 讓單元測試很容易跑起來

對開發環境進行配置, 最好是敲條命令或是點個按鈕就能把單個測試用例或測試套件跑起來.

4. 對測試進行評估

對執行的測試進行覆蓋率分析, 得到精確的代碼執行覆蓋率, 並調查哪些代碼未被執行.

5. 立即修正失敗的測試

每個開發人員在提交前都應該保證新的測試用例執行成功, 當有代碼提交時, 現有測試用例也都能跑通.

如果一個定期執行的測試用例執行失敗, 整個團隊應該放下手上的工作優先解決這個問題.

6. 把測試維持在單元級別

單元測試即類 (Class) 的測試. 一個 "測試類" 應該隻對應於一個 "被測類", 並且 "被測類" 的行為應該被隔離測試. 必須謹慎避免使用單元測試框架來測試整個程序的工作流, 這樣的測試既低效又難維護. 工作流測試 (譯註: 指跨模塊/類的數據流測試) 有它自己的地盤, 但它絕不是單元測試, 必須單獨建立和執行.

7. 由簡入繁

最簡單的測試也遠遠勝過完全沒有測試. 一個簡單的 "測試類" 會促使建立 "被測類" 基本的測試骨架, 可以對構建環境, 單元測試環境, 執行環境以及覆蓋率分析工具等有效性進行檢查, 同時也可以證明 "被測類" 能夠被整合和調用.

具體參考準側請參考:

https://github.com/yangyubo/zh-unit-testing-guidelines

五 我們該何時進行單元測試呢?

1、寫完代碼以後:想要驗證一下自己寫的代碼是否有問題。

2、寫代碼之前:就是寫代碼之前所有的功能分模塊的設計好,測試通過瞭再寫。(我反正是沒用過)。

3、修復某個bug後:一般修復完某個bug,為瞭確保修復是成功的,會寫測試。

六 我們該如何進行單元測試呢?

 

這裡寫圖片描述

 

第一步:我們來創建一個工程

 

這裡寫圖片描述

 

第二步 工程建好瞭,我們找到系統單元測試Testes文件夾中.m文件看中會到看到幾個方法,我們來看下這個幾個方法是什麼時候調用和他們各自的作用,如圖所示.

 

這裡寫圖片描述

 

第三步 我們在viewController.h裡面定義一個簡單的方法.

 

這裡寫圖片描述

 

第四步 我們在viewController.m裡面實現它.

 

這裡寫圖片描述

 

第五步 方法創建完瞭,我們在測試的文件中導入ViewController.h,同時把申明成一個屬性如圖所示:

 

這裡寫圖片描述

 

第六步 測試用例實現

1) 正常情況

 

這裡寫圖片描述

 

設置好瞭,我們command+u快捷方式運行,或者produce–>test運行.

結果顯示:

 

這裡寫圖片描述

 

2) 假如返回的結果與我們設定值不等時,結果又會出現什麼情況?

 

這裡寫圖片描述

 

第七步 性能測試用例實現

 

這裡寫圖片描述

 

結束

今天就講到這裡,大傢對單元測試有沒有一個初步的印象瞭

You May Also Like