[91大的TDD課程心得] Unit Test 基本認識

Unit Test。

從踏入軟體工作就聽過的名詞~

但以往只知道是小小的測試,就是要補一堆很廢的文件

以示對自己程式碼的負責。

腦中浮現的就是很不想面對的名詞,但又好像聽起來很有道理必須面對。

回想過去,沒有好的工具、沒有明確的 Unit Test 定義,完全就是放給他爛

最近自己也開始著墨這個部份~ 上完課終於有全面的瞭解啦!!

 

什麼是 Unit Test?

  • 最小的測試單位
  • 外部相依性為零
  • 不具備商業邏輯
  • 測試案例之間相依性為零
  • 一個測試案例只測一件事

※ 「一件事」並不一定是一個 Function,而是一個「工作單元」(Unit of Work)
※ Unit Test 是最小粒度測試,具最佳的健壯性


好的 Unit Test 特性:FIRST 

  • Fast
  • Independent
  • Repeatable
  • Self-Validating
  • Timely

※ Fast:除了表示效能高之外,更重要的是能夠維持 Coding 的節奏。
思緒不會被冗長、緩慢的測試中斷。「意圖導向」!

※ Independent:便於移植到其他環境測試

※ Self-Validating:該單元測試有確實針對精確的項目進行驗證
若該測試項目出現紅燈,可以馬上知道什麼功能因為某確切原因掛了!
不需要再透過某些方式一一查證確切因素。

※ Timely:測試程式與 Produciton code 同時完成並且上扣,而非單單只是拋上
Production Code,對自己的程式碼表示負責。


3A 原則

  • Arrange
    • 初始宣告
    • 初始化目標物件
    • 初始化方法參數
    • 建立模擬物件行為
    • 設定環境變數期望結果
  • Act
    • 實際呼叫測試目標物件方法
  • Assert
    • 驗證目標是否如同預期運作

※ 應於測試程式內依序撰寫三個部份,建立團隊的共同 Concept