優秀的Unit Test(UT)和優秀的程式碼一樣,不外乎清楚簡潔。
本書的作者,偏好在方法的命名上下重點,讓UT可以從字面就知道要測試什麼。例如:TestReturnsZeroWhenEmptyString(),表示這是一個測試,並且當是空的字串會回傳0。
不過他有提到幾個特性非常重要:
意思是當我的程式碼過了兩天,兩週,兩個月,我還是知道這個UT是要執行什麼動作,回傳值是什麼,當發生問題可以很快找到原因。而且這個測試是很容易操作,很快得到答案(畢竟測試是一個小單元,又不是很多功能)。
但是當產生出來的結果無法控制,或是無法清楚我們這個測試的內容是什麼的時候,有可能是「集成測試」(Integration Testing)。也就是我們測試的項目太多,就像是我們一次測試很多程式碼,只知道最後結果是錯誤,但不知道哪編出問題。如同手機壞掉了,但是我們只知道他壞了,無法開機(沒錯!我們的測試就只是開機看能不能開啟),但是不知道哪邊出問題,是電池沒電,還是螢幕壞掉,主機板燒掉.....。
這樣的測試範圍太大,不適合在程式開發的時候執行,因為程式要保證每個地方都可以順利進行,而不是「看起來」、「應該」可以過。
TDD是測試驅動開發(Test-Driven Development),是為一種開發方式。
簡單來說就是先設計好測試的方法,根據這個方法再進行開發。例如,我先做好100公尺的測試距離,當我做好腳踏車的時候,看能不能騎到100公尺,如果可以表示我的腳踏車做成功,不行的話代表這個這根本不能叫做腳踏車!!所以當我每錯出一次成品的時候,就可以試騎,如果失敗,就回去做,如果成功,我就可以進行下一步。
可是這樣不就僅要寫我們的主要功能,還要寫測試功能,要寫很多程式碼呢!TDD有什麼好處呢?有人提到可以增加個人的開發速度。但我覺得能提昇作業品質是最重要的XDDD(完全跟TDD沒關係)
不管怎樣,做得好的TDD可以減少開發時間,和增加程式碼的品質。