iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 2
1
Software Development

【Unit Test】Unit Test with C#系列 第 2

【Day 2】優秀的Unit Test & 簡介TDD

優秀的Unit Test

優秀的Unit Test(UT)和優秀的程式碼一樣,不外乎清楚簡潔。
本書的作者,偏好在方法的命名上下重點,讓UT可以從字面就知道要測試什麼。例如:TestReturnsZeroWhenEmptyString(),表示這是一個測試,並且當是空的字串會回傳0

不過他有提到幾個特性非常重要:

  • 是自動化,可以重複執行
  • 很容易實現
  • 第二天還有意義
  • 任何人都能一鍵執行
  • 運作很快速
  • 結果都很穩定:多次執行結果都會一致
  • 能夠完全控制被測試的單元
  • 應該是完全隔離於其他測試行為
  • 當失敗了,我們很容易知道會有什麼結果,並且鎖定問題。

意思是當我的程式碼過了兩天,兩週,兩個月,我還是知道這個UT是要執行什麼動作,回傳值是什麼,當發生問題可以很快找到原因。而且這個測試是很容易操作,很快得到答案(畢竟測試是一個小單元,又不是很多功能)。
但是當產生出來的結果無法控制,或是無法清楚我們這個測試的內容是什麼的時候,有可能是「集成測試」(Integration Testing)。也就是我們測試的項目太多,就像是我們一次測試很多程式碼,只知道最後結果是錯誤,但不知道哪編出問題。如同手機壞掉了,但是我們只知道他壞了,無法開機(沒錯!我們的測試就只是開機看能不能開啟),但是不知道哪邊出問題,是電池沒電,還是螢幕壞掉,主機板燒掉.....。
這樣的測試範圍太大,不適合在程式開發的時候執行,因為程式要保證每個地方都可以順利進行,而不是「看起來」、「應該」可以過。

TDD

TDD是測試驅動開發(Test-Driven Development),是為一種開發方式。
簡單來說就是先設計好測試的方法,根據這個方法再進行開發。例如,我先做好100公尺的測試距離,當我做好腳踏車的時候,看能不能騎到100公尺,如果可以表示我的腳踏車做成功,不行的話代表這個這根本不能叫做腳踏車!!所以當我每錯出一次成品的時候,就可以試騎,如果失敗,就回去做,如果成功,我就可以進行下一步。

可是這樣不就僅要寫我們的主要功能,還要寫測試功能,要寫很多程式碼呢!TDD有什麼好處呢?有人提到可以增加個人的開發速度。但我覺得能提昇作業品質是最重要的XDDD(完全跟TDD沒關係)

不管怎樣,做得好的TDD可以減少開發時間,和增加程式碼的品質。


上一篇
【Day1】開始-目標概述
下一篇
【Day 3】安裝NUnit
系列文
【Unit Test】Unit Test with C#31

尚未有邦友留言

立即登入留言