一般程式開發人員的習慣是撰寫完一段功能後再加以測試, 也就是說先由開發者角度去創建系統。但測試驅動開發(Test-Driven-Development)卻是從使用的角度開始, 反向讓開發人員回頭撰寫正確執行的程式。
----------------- 何謂測試驅動開發TDD -----------------
你可能會覺得連內容都沒有要怎麼測試呢?沒錯, 測試驅動的用意即是如此!
例如我希望有一個功能是將輸入的兩個數字相加。那測試端就必須事先模擬ex: a = 1, b = 2 。期望值為兩數相加將會等於3, 假設我的方法沒有將處理結果等於3即為錯誤。
一開始主程式的方法只是一個框架:
public int add(int a, int b) { // 尚無任何內容 return 0; }
測試框架則是已經寫完使用情形:
public int testAdd(){ int a = 1; int b = 2; int expect = a + b; // 期望值 if(expect == add(a, b)){ System.out.println("Testing success"); }else{ System.out.println("Testing failed"); } }
到目前為止測試框架的結果絕對都是Testing failed, 因為主程式add還沒有計算的過程。
現在讓我們回過頭來編寫 add 方法:
public int add(int a, int b){ return a + b; }
再去測試一次得到Testing success, 大功告成!!
所以測試驅動開發能讓開發者模擬任何情況, 例如最常見的輸入null值等等作相對應的處理, 並且強迫設計程式時,去考慮到物件的低耦合。
上述的範例只是告知各位測試驅動的原理, 事實上 JUnit 並不需要把測試環境寫在同一個類別中, 而是獨立出來的, 所以開發者可以放心使用, 不必擔心程式碼到後期很難管理。
----------------- JUnit簡介 -----------------
JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立並包括了以下的特性:
1. 對預期結果作斷言
2. 提供測試裝備的生成與銷毀
3. 易於組織與執行測試
4. 圖型與文字介面的測試器
來自JUnit的體驗對測試驅動開發是很重要的,所以一些 JUnit知識經常 和測試驅動開發的討論融合在一起。可以參考Kent Beck的 《Test-Driven Development: By Example》一書(有中文版)。
JUnit 的測試主要由 TestCase、TestSuit 與 TestRunner 三部份架構起來。
詳細請參閱良葛格學習筆記:
TestSuite: http://caterpillar.onlyfun.net/Gossip/JUnit/TestSuite.htm
TestCase: http://caterpillar.onlyfun.net/Gossip/JUnit/TestCase.htm
Failure、Error: http://caterpillar.onlyfun.net/Gossip/JUnit/FailureError.htm
----------------- 相關教學 -----------------
以下網址收錄了詳細的影音教學, 而Eclipse 3.1以後即預設支援JUnit test case, 所以使用Eclipse的朋友們可以事半功倍的來實現測試框架。
JUnit 官網: http://www.junit.org/
影片教學(with Eclipse & NetBeans): http://www.blogjava.net/beansoft/archive/2007/10/29/156650.html
文字教學: http://caterpillar.onlyfun.net/Gossip/JUnit/JUnitGossip.htm
沒有留言:
張貼留言