很久沒有被問到測試的問題了,工程師滿臉的疑惑,看起來可能是剛剛才看了一堆談測試的書籍,還沒能抓到真正的精神。請不要著急! 理論固然重要,但請從實務做開始,而且要做得越簡單就越好…。在開始之前,請先自問一下:
你的程式加Log了嗎?沒有程式可以沒有LOG的,請從務實著手。
難的東西看起來總是比較有學問,所以要養成先看問題再找解答(尤其是使用設計模式)
坊間談單元測試的書都講得太多了些,立意良好,但害人不淺。測試程式是配角(XD),
可有可無?! 全在你一念之間
。太繁雜的步驟不如不要(以後實力變強了,再來試試)。一定要力求簡單、再簡單,如果簡單不下來,則不如不做。(假設你連主程式都沒有力氣寫好,測試對你的負擔就更大了 ??? 還不如先把需求弄清楚,真正弄懂了需求,自然能評估自己或團隊有沒有能力做出來了!)
實作看看: 先來一個夠簡單的TDD含單元測試
Test Driven Development 測試開發練習:
步驟一
、啟動 IDE 編輯器,選擇 Winform Application,
命名: WindowsForms_TDDUnittest。
步驟二
、新增一單元測試專案,命名: UnitTestProject_TDDunittest。
步驟三
、完成起手勢(在第一個TestMethod內寫入 3A註解)。
[TestMethod]
public void TestMethod1()
// Arrange
// ACT
// Assert
步驟四
、開始撰寫程式功能,命名
ParseAndSum( string inputData)
。
紅燈代表錯誤,綠燈表示pass.
吃到錯誤訊息! (如上圖所顯示的
紅色波浪線
)。
步驟五
、到主程式加入此功能程式
Public Int ParseAndSum( String Number)
。
這是新增功能的起手勢(依個人喜好而定,下面的預設result值是我的個人習慣)
public int ParseAndSum(string number)
int result = -1;
// — 程式碼 –//
return result;
步驟六
、執行一次此單元測試,應該得到以下錯誤訊息:
亮紅燈是正常的開始
註: 有時候如果你在預設值與測試資料值設成相同的時候,就會很驚訝竟然過了! XD
步驟七
、為此程式功能加入程式碼:
參考: 單元測試的藝術中的一個簡單範例
執行一次此單元測試,看結果。
綠燈表示通過測試
結果是OK(綠燈),表示單元測試測得該功能能夠正確執行預設的 IO輸入值。
如果還吃Error(紅燈),表示單元測試測未通過,繼續主程式端的程式修改作業一直到它能夠通過此測試。
此時的
TestMethod1
就是我們的單元測試程式碼,在進行重構主程式之前,務必重新命名此測試程式,讓他能夠一眼就看出來是哪一塊主程式的測試程式。(例如: Unittest_ParseAndSum)
這個時候你應該對剛剛的程式碼產生足夠的信心了,可以繼續做下一個功能了. 如果信心不夠的話,就去執行一次主程式好了。一般的測試開發過程,我們不會一直去執行主程式的,尤其不會跑去執行從頭到尾都沒有修改過的那些程式區塊,這就是單元測試的好處,總是以手頭上的程式邏輯為主,這樣的習慣可以適當的增強小區塊程式的邏輯完整性,也就是避免掉了不應該要有的Bug,程式會自然的變得更堅強。
再來強調一下,單元測試才是重點,TDD只是一種寫程式的習慣,我不會整支程式都這麼開發的,通常在邏輯越是模糊的時候,越需要邊走邊弄清楚原委的時候,我就會想紮紮實實的做好該做的基礎,這時候正是TDD最可以幫上忙得時候了。
( 91 在網路上有一系列的相關說明:
[30天快速上手TDD] 可以作為參考
)