[Unit test note] 哪寫東西不算單元測試
最近在學習unit test如何撰寫 所以上google找了一些資料 看到一篇文章 http://www.artima.com/weblogs/viewpost.jsp?thread=126923 A Set of Unit Testing Rules - Michael Feathers 作者在文章中提到幾點不能被稱作unit test的測試 It talks to the database 與資料庫連接 測試之中需要對資料庫做讀寫查詢的動作 It communicates across the network 測試之間透過網路對談 測試之中元件的溝通需要透過網路 It touches the file system 使用到檔案系統 測試之中需要做檔案的讀寫存取 It can't run at the same time as any of your other unit tests 不能與其他的單元測試同時執行 單元測試之間無法獨立執行 you have to do special things to your environment (such as editing config files to run it) 在測試時必須作特殊的設定 每次測試都需要做特殊的設定 以上作者提到的點,雖然不是不應該測試,但是在Unit test中,重要的目的是,獨立力測試各個元件的正確性,與其是否達到目的。所以對於資料庫、網路、檔案系統的操作應該需要被獨立在測試外,由整合測時時來做測試,才可以確保測試真正個核心是在元件本身,也就是說可以獨立問題的所在。舉例來說,對於需要讀寫檔案做處理的原件,如果單元測試出錯,又沒有把檔案的操作獨立,這樣的一來單元測試無法幫助你分辨是你的元件出錯或是檔案的讀寫出錯,這樣單元測試的幫助就不大。假如你有利用Mock object的技術把與元件與外部元件的操作獨立,這樣一來就能較精確地抓住問題所在。 所以今天的結論是,單元測試,必須確定測試的是元件的邏輯,是獨立的測試,必須將與其他元件的溝通切的乾淨清楚,才能有效的對元件做獨立的單元測試,幫助找到正確的問題,至於如何把元件之前的溝通切的乾淨清楚,又是另一個課題了。