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

Unit Test Introduction.pdf

hatelove
April 30, 2012

Unit Test Introduction.pdf

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

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可以保護自己 • 可以循序漸進的讓現有系統固若金湯 • 可以平行開發,不用依賴外部元件