[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的技術把與元件與外部元件的操作獨立,這樣一來就能較精確地抓住問題所在。


所以今天的結論是,單元測試,必須確定測試的是元件的邏輯,是獨立的測試,必須將與其他元件的溝通切的乾淨清楚,才能有效的對元件做獨立的單元測試,幫助找到正確的問題,至於如何把元件之前的溝通切的乾淨清楚,又是另一個課題了。

留言

這個網誌中的熱門文章

電腦網路project