單元測試

今天開始,會學習整理測試相關的一些方法、技術。作為一名開發(fā)人員,只有真的懂測試,懂測試手段和策略,才能寫出高質量的代碼。說到底,我就是想寫出更高質量的代碼。

如何做好單元測試?

要做好單元測試,必須弄清楚單元測試的對象是代碼,以及代碼的基本特征和產生錯誤的原因,然后還要掌握單元測試的基本方法和主要技術手段,比如什么是驅動代碼、樁代碼和 Mock 代碼。

第一,代碼的基本特征與產生錯誤的原因

無論什么語言,都會有條件分支、循環(huán)處理和函數調用等最基本的邏輯控制,拋開具體的業(yè)務邏輯,僅看代碼結構,會發(fā)現(xiàn)所有的代碼都是在對數據進行分類處理,每一次條件判斷都是一次分類處理。

任何一個分類遺漏,都會產生缺陷;如果有任何一個分類錯誤,也會產生缺陷;如果分類正確沒有遺漏,但是分類時處理邏輯錯誤,也同樣會產生缺陷。

可見,要做到代碼功能邏輯正確,必須做到分類正確并且完備無遺漏,同時每個分類的處理邏輯必須正確。

作為工程師,具體開發(fā)過程中需要考慮(等價類測試):

  • 如果要實現(xiàn)正確的功能邏輯,會有哪幾種正常的輸入;
  • 是否有需要特殊處理的多種邊界輸入;
  • 各種潛在非法輸入的可能性以及如何處理。

第二,單元測試用例詳解

單元測試的用例是一個“輸入數據”和“預計輸出”的集合

完整的單元測試“輸入數據”:

  • 被測試函數的輸入參數;
  • 被測試函數內部需要讀取的全局靜態(tài)變量;
  • 被測試函數內部需要讀取的成員變量;
  • 函數內部調用子函數獲得的數據;
  • 函數內部調用子函數改寫的數據;
  • 嵌入式系統(tǒng)中,在中斷調用時改寫的數據;

如果沒有明確的預計輸出,那么測試本身就失去了意義。同樣地,“預計輸出” 絕對不是只有函數返回值這么簡單,還應該包括函數執(zhí)行完成后所改寫的所有數據。 具體來看有以下幾大類:

  • 被測試函數的返回值;
  • 被測試函數的輸出參數;
  • 被測試函數所改寫的成員變量;
  • 被測試函數所改寫的全局變量;
  • 被測試函數中進行的文件更新;
  • 被測試函數中進行的數據庫更新;
  • 被測試函數中進行的消息隊列更新;

第三,驅動代碼,樁代碼和 Mock 代碼

  • 驅動代碼(Driver)指調用被測函數的代碼
  • 樁代碼(Stub)是用來代替真實代碼的臨時代碼。(比如一個方法,直接返回想要的數值)
  • Mock 代碼和樁代碼非常類似。

這篇文章是在極客時間上學習的筆記,只是某一節(jié)很小的一部分,如果想更深入的學習,可以去買課程。當然我不是來打廣告的,我只是一名 iOS 開發(fā)。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android單元測試介紹 處于高速迭代開發(fā)中的Android項目往往需要除黑盒測試外更加可靠的質量保障,這正是單...
    東經315度閱讀 3,420評論 6 37
  • 單元測試的必要性 完整,規(guī)范的單元測試有利于提升程序的“自動化”驗證 降低后期程序的維護成本 高覆蓋率的單元測試在...
    大大大大大先生閱讀 873評論 0 2
  • 單元測試不是一個小工程,需要多用些時間才能做好,不要希望通過這個文章就能掌握單元測試,這只是一個入門,需要自己動手...
    勇不言棄92閱讀 8,099評論 9 60
  • 本文試圖總結編寫單元測試的流程,以及自己在寫單元測試時踩到的一些坑。如有遺漏,純屬必然,歡迎補充。 目錄概覽: 編...
    蘇尚君閱讀 3,556評論 0 4
  • 這本書教你為什么要關注可測試性, 如何編寫可測試的代碼, 以及如何推動測試落地. 書中的代碼是.NET的, 不太習...
    回文魚閱讀 2,167評論 0 2

友情鏈接更多精彩內容