Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Unit Test Introduction.pdf

Avatar for hatelove hatelove
April 30, 2012

Unit Test Introduction.pdf

單元測試簡介以及mock的意義

Avatar for hatelove

hatelove

April 30, 2012
Tweet

More Decks by hatelove

Other Decks in Programming

Transcript

  1. - 2 - 常見的問題 開發常 見問題 要到真實環境 方能測試程式 無誤 頁面發生錯誤,

    到底是誰錯了? 交付的程式, 到底測過哪些 東西了? 我改了這支程 式,會不會害 別的程式掛掉? 怎麼讓UI, Service, Data Access平行開 發?
  2. - 3 - 解決方式 Unit Test Unit Test使用 mock object

    來模擬外部回 傳的資料 把input值當做 test case,跑 一次Unit Test 交付的程式, 包括Unit Test 程式碼 改完程式就跑 一次Unit Test 吧 Unit Test中使 用mock object,達到 關注點分離 模擬真實環境 針對案例,所有 單元可獨立測試 明確知道哪些程 式碼有被測到 迴歸測試保護 遵循介面
  3. - 4 - 什麼是Unit Test Unit Test的定 義 最小的測試單位 外部相依性為零

    不具備邏輯 測試案例之間 相依性為零 一個測試案例 只測一種方法
  4. - 9 - • 測試目標需封裝成DLL • 測試方法內容,需不相依於外部類別 • 只能測試Public的類別方法 Unit

    Test的前提 測試目標方法內容 類別庫 Unit test 資料庫 外部 Service 測試專案 File
  5. - 12 - 模擬外部類別 Stub • 定義預期回傳值 Mock • 定義預期回傳

    值 • 可驗證呼叫次 數、順序以及 相關參數
  6. - 15 - Mock framework做的事 • 將Stub類別透過Dynamic proxy打包 • Run

    time才產生Stub類別,決定回傳值,用完即丟
  7. - 17 - 好的Unit Test Features • 執行速度快 • Unit

    test程式碼應該很短 • Naming應該要可以看出要測的東西 • Unit test內容就類似code的spec • 應該與外界獨立 • 應該要能自動化
  8. - 18 - 好的Unit Test Features (cont.) • 應該在任何環境下都可以測試 •

    一次只測一件事 • IoC設計 • 失敗應該可以馬上知道出了什麼問題 • 設計test case要考量是否有boundary需要測試
  9. - 19 - 結論 • Unit Test撰寫並不困難 • 讓架構與設計能力獲得提昇 •

    Unit Test可以保護自己 • 可以循序漸進的讓現有系統固若金湯 • 可以平行開發,不用依賴外部元件