Ruddy Lee 分享空間

Emergent Design 演化設計

TDD 與 Unit test 練習 — 從簡單開始

leave a comment »

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

你的程式加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)

error_1

紅燈代表錯誤,綠燈表示pass.

吃到錯誤訊息! (如上圖所顯示的紅色波浪線)。

步驟五、到主程式加入此功能程式 Public  Int ParseAndSum( String Number)

    這是新增功能的起手勢(依個人喜好而定,下面的預設result值是我的個人習慣)

 public int ParseAndSum(string number)

        {

            int result = -1;   

.

             // — 程式碼 –//

.

            return result;

        }

步驟六、執行一次此單元測試,應該得到以下錯誤訊息:

error_2

亮紅燈是正常的開始

.

註: 有時候如果你在預設值與測試資料值設成相同的時候,就會很驚訝竟然過了!😄

步驟七、為此程式功能加入程式碼:

error_3

參考: 單元測試的藝術中的一個簡單範例

.

執行一次此單元測試,看結果。

OK_1
綠燈表示通過測試

.

結果是OK(綠燈),表示單元測試測得該功能能夠正確執行預設的 IO輸入值。

如果還吃Error(紅燈),表示單元測試測未通過,繼續主程式端的程式修改作業一直到它能夠通過此測試。

.

【結論】

此時的 TestMethod1 就是我們的單元測試程式碼,在進行重構主程式之前,務必重新命名此測試程式,讓他能夠一眼就看出來是哪一塊主程式的測試程式。(例如: Unittest_ParseAndSum)

這個時候你應該對剛剛的程式碼產生足夠的信心了,可以繼續做下一個功能了. 如果信心不夠的話,就去執行一次主程式好了。一般的測試開發過程,我們不會一直去執行主程式的,尤其不會跑去執行從頭到尾都沒有修改過的那些程式區塊,這就是單元測試的好處,總是以手頭上的程式邏輯為主,這樣的習慣可以適當的增強小區塊程式的邏輯完整性,也就是避免掉了不應該要有的Bug,程式會自然的變得更堅強。

.

再來強調一下,單元測試才是重點,TDD只是一種寫程式的習慣,我不會整支程式都這麼開發的,通常在邏輯越是模糊的時候,越需要邊走邊弄清楚原委的時候,我就會想紮紮實實的做好該做的基礎,這時候正是TDD最可以幫上忙得時候了。

.

( 91 在網路上有一系列的相關說明: [30天快速上手TDD] 可以作為參考)

Written by ruddyllee

2015 年 05 月 07 日 於 23:09:17

張貼於未分類

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: