前言:在公司寫單元測試已經有兩個多月了(思想上有過糾結),說實話有點像趕鴨子上架,在項目收尾的時候才做,很明顯它的作用已經是名副其實了,而且還找像我這樣的新手來寫(一開始我都不怎么熟悉業務流程),所以現在一直努力學好單元測試,寫好它,把自己的事做好!
我也是在讀程序員修煉之道 - 單元測試這本書之后,再閱讀了園子中的各個文章后的感悟把,寫出來跟大家一起分享!
電子書下載地址:http://www.kuaipan.cn/file/id_29568238492847284.htm
測試是貫穿整個整個軟件工程的始末,做好測試對軟件的質量會有一個質的保證,減少查找BUG的工作量,所以作為一個開發者需要了解各種測試流程以及核心思想,然而這次的單元測試是我們開發者必須要具備的技能,這次就讓我們走進單元測試(Unit Test)!
1.個人對單元測試的初識
①堅持的開發中編寫單元測試,并把它培養成一種習慣!
②寫出高效的單元測試,這種能力需要在實踐中慢慢積累!
③提高對單元測試的認識高度,把它和編碼工作同等對待!
2.什么是單元測試?
通俗講單元測試就是檢查一個函數執行后它的返回結果或者它對系統數據造成的影響(或者其它方面的影響)是否跟你的期望一致,也就是為了證明代碼的行為和我期望的一致!
3.我們為什么要使用單元測試?
①最直接的原因是保證我們函數的正確性,如果這個函數在沒有保證正確的情況下就被上層代碼調用,那么隨著項目的深入,調用層次會越來越深,就很容易產生嚴重的BUG問題,從而增加開發難度,降低開發效率!
②根本原因是減輕我們開發人員的工作量,使我們的工作變的輕松(這只是一個相對說法)!
4.單元測試的內涵
如果把單元測試上升到一定程度后,它可以把我們的代碼變的更加完美和簡潔!
5.單元測試的本質
請記住一點,不是為工作而編寫單元測試,單元測試是方便我們開發人員的,可以使我們的工作變的輕松!
單元測試可以減少我們花在解決不必要的BUG之上(并不是說沒有BUG,而是說減少不必要的BUG),而把大量時間專注于業務需求上!
6.函數的行為和預期的一致嗎?
如果測試只考慮在正確的環境下造成正確的影響,那么這樣的單元測試是不及格的!
做測試就要考慮全面,各個方面都要涉及的到,如:環境因素(也可以是系統所處在的環境),各種異常,邊界值等等,所以盡可能的考慮特殊情況,做到做到百密而無一疏(盡自己的最大努力達到)!
7.需要依賴單元測試嗎?
答案是肯定的!
當你很自信的認為你寫的函數是絕對正確的且沒有測試代碼做為依據的時候往往會出現意想不到的錯誤,因為你會疏忽了其它的一些情況,所以編寫單元測試來保證我們函數的準確性是非常有必要的!
注:后面會說明測試應該測哪些情況!
8.單元測試干了什么,作用是什么?
①最直接的是保證了函數的正確性(這個大家都知道)!
②還有我們可以根據單元測試來判斷此函數是用來干什么的,也就說單元測試類似于一個可執行文檔,其它開發人員可以通過看單元測試就會明白你測試的函數是用來干嘛的!
9.如何進行單元測試?
這邊我們使用的VS2008,2010自帶的單元測試框架!
① 使用VS自帶的Unit Test,簡單易學!
② 測試要全面!
③ 保證所有測試都能通過,不管舊的還是新的測試代碼,都要通過!
④ 保證所有測試沒有對系統中任何模塊產生影響(這個很重要)!
⑤ 及時運行測試代碼,查看運行結果,保證系統的運行正常!
10.不要為沒寫測試代碼找借口
一般情況的看來當你寫的一個函數已經不太需要修改了,你就應該編寫這個函數的單元測試代碼!
大多數情況下開發人員的大量時間都是修改BUG,如果能盡早的做單元測試將會減輕你的工作量(雖然不可能沒有BUG,但寫Unit Test卻對你是有益無害的),即使在以后的時間里出現BUG,我想你能很快的定位產生BUG的位置!
最后寫Unit Test千萬不要放在項目末期,如果此時寫單元測試的人還是一個剛進項目新手的話,寫單元測試就是扯淡,這樣的方式是不能體現單元測試的核心觀念的,而我就剛好處于這個狀態,真的很后怕,所以還需要多多加油,努力了解系統流程!
11.如果真的沒有時間寫單元測試,請思考下面幾個問題?
①對于你所編寫的代碼,你花在調試上面的時間有多少?
②你目前認為你的代碼正確無比,但很有可能在系統中卻存在嚴重隱患,你是否花了很多時間來查找這些隱患?
③對于一個新的BUG,你花了多長時間來定位這個BUG在源碼中的位置?
總結:隨著項目的深入,你的函數會被調用的越來越深,那么特殊情況就會經常發生,萬一出現什么情況你將會耗費很多的精力來解決它,另一方面,適當的單元測試代碼會很大程度上減少你的工作量,這是經過實踐檢驗的!
總結:好了基本的單元測試思想就這么多了,希望園友們能指點一二,單元測試系列將持續更新中!
相關文章:
走進單元測試二:測試需要從哪些方面著手