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