添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

很久沒有被問到測試的問題了,工程師滿臉的疑惑,看起來可能是剛剛才看了一堆談測試的書籍,還沒能抓到真正的精神。請不要著急! 理論固然重要,但請從實務做開始,而且要做得越簡單就越好…。在開始之前,請先自問一下:

你的程式加Log了嗎?沒有程式可以沒有LOG的,請從務實著手。

難的東西看起來總是比較有學問,所以要養成先看問題再找解答(尤其是使用設計模式)

坊間談單元測試的書都講得太多了些,立意良好,但害人不淺。測試程式是配角(XD), 可有可無?! 全在你一念之間 。太繁雜的步驟不如不要(以後實力變強了,再來試試)。一定要力求簡單、再簡單,如果簡單不下來,則不如不做。(假設你連主程式都沒有力氣寫好,測試對你的負擔就更大了 ??? 還不如先把需求弄清楚,真正弄懂了需求,自然能評估自己或團隊有沒有能力做出來了!)

實作看看: 先來一個夠簡單的TDD含單元測試

Test Driven Development 測試開發練習:

步驟一 、啟動 IDE 編輯器,選擇 Winform Application,

命名: WindowsForms_TDDUnittest。

步驟二 、新增一單元測試專案,命名: UnitTestProject_TDDunittest。

步驟三 、完成起手勢(在第一個TestMethod內寫入 3A註解)。

[TestMethod]

public void TestMethod1()

// Arrange

// ACT

// Assert

(請務必參考: 3A Pattern 發明人 Bill Wake 網站 ,他會跟你講變化何在?)

步驟四 、開始撰寫程式功能,命名 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] 可以作為參考 )