Slide 1

Slide 1 text

Joey Chen 2011/7/6 Unit Test Introduction

Slide 2

Slide 2 text

- 2 - 常見的問題 開發常 見問題 要到真實環境 方能測試程式 無誤 頁面發生錯誤, 到底是誰錯了? 交付的程式, 到底測過哪些 東西了? 我改了這支程 式,會不會害 別的程式掛掉? 怎麼讓UI, Service, Data Access平行開 發?

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

- 4 - 什麼是Unit Test Unit Test的定 義 最小的測試單位 外部相依性為零 不具備邏輯 測試案例之間 相依性為零 一個測試案例 只測一種方法

Slide 5

Slide 5 text

- 5 -

Slide 6

Slide 6 text

- 6 - 如何撰寫Unit Test

Slide 7

Slide 7 text

Demo

Slide 8

Slide 8 text

- 8 - 我的程式沒辦法測? • 為什麼我的console跟web site沒辦法跑Unit Test? • 為什麼我沒法子決定expect跟目標return的值? • 別人的service或DB還沒準備好,我沒法測?

Slide 9

Slide 9 text

- 9 - • 測試目標需封裝成DLL • 測試方法內容,需不相依於外部類別 • 只能測試Public的類別方法 Unit Test的前提 測試目標方法內容 類別庫 Unit test 資料庫 外部 Service 測試專案 File

Slide 10

Slide 10 text

Demo 與外部類別相依的方法

Slide 11

Slide 11 text

- 11 - 如何與外部類別獨立

Slide 12

Slide 12 text

- 12 - 模擬外部類別 Stub • 定義預期回傳值 Mock • 定義預期回傳 值 • 可驗證呼叫次 數、順序以及 相關參數

Slide 13

Slide 13 text

- 13 - Stub Class原理

Slide 14

Slide 14 text

- 14 - Stub Class示意圖

Slide 15

Slide 15 text

- 15 - Mock framework做的事 • 將Stub類別透過Dynamic proxy打包 • Run time才產生Stub類別,決定回傳值,用完即丟

Slide 16

Slide 16 text

Demo Mock framework

Slide 17

Slide 17 text

- 17 - 好的Unit Test Features • 執行速度快 • Unit test程式碼應該很短 • Naming應該要可以看出要測的東西 • Unit test內容就類似code的spec • 應該與外界獨立 • 應該要能自動化

Slide 18

Slide 18 text

- 18 - 好的Unit Test Features (cont.) • 應該在任何環境下都可以測試 • 一次只測一件事 • IoC設計 • 失敗應該可以馬上知道出了什麼問題 • 設計test case要考量是否有boundary需要測試

Slide 19

Slide 19 text

- 19 - 結論 • Unit Test撰寫並不困難 • 讓架構與設計能力獲得提昇 • Unit Test可以保護自己 • 可以循序漸進的讓現有系統固若金湯 • 可以平行開發,不用依賴外部元件

Slide 20

Slide 20 text

Thanks for your listening Q & A