單元測(cè)試(Unit testing)到底是什么?
引言
做開(kāi)發(fā)的同學(xué)應(yīng)該都聽(tīng)說(shuō)過(guò)單元測(cè)試(unit testing),因?yàn)閷?duì)單元測(cè)試的理解程度不同,所以對(duì)單元測(cè)試的看法也可能有所不同。本文就來(lái)深入講解一下單元測(cè)試的概念、作用和是否需要做單元測(cè)試。
什么是單元測(cè)試(unit testing)?
單元測(cè)試(unit testing)是軟件開(kāi)發(fā)中的一種最低級(jí)別的測(cè)試方式,對(duì)軟件中的最小可測(cè)單元進(jìn)行檢查和驗(yàn)證,看功能是否符合預(yù)期。單元測(cè)試是在軟件開(kāi)發(fā)過(guò)程中進(jìn)行的,測(cè)試代碼由開(kāi)發(fā)人員進(jìn)行編寫。單元測(cè)試是自動(dòng)化測(cè)試的一種常見(jiàn)形式,可以確保軟件的獨(dú)立單元在與其他部分相隔離的情況下正常運(yùn)行。
因單元測(cè)試這個(gè)術(shù)語(yǔ)是軟件工程學(xué)發(fā)展過(guò)程中逐漸濃縮出來(lái)的,所以對(duì)于單元測(cè)試中單元的具體含義要根據(jù)實(shí)際情況而定,單元可以是一個(gè)函數(shù)、一個(gè)類或者一個(gè)模塊等。單元測(cè)試是從微觀層面來(lái)測(cè)試代碼是否正確的,例如具體化地測(cè)試某個(gè)函數(shù)功能是否正常,所以在單元測(cè)試階段并不關(guān)心上層業(yè)務(wù)邏輯正確與否。舉個(gè)具體的例子,假如寫了一個(gè)計(jì)算字符串md5值的函數(shù),在單元測(cè)試階段會(huì)寫對(duì)應(yīng)的代碼來(lái)測(cè)試這個(gè)方法是否正確的計(jì)算出了傳入字符串的md5值,而不會(huì)去關(guān)心調(diào)用此方法的上層功能邏輯正確與否。
有沒(méi)有必要寫單元測(cè)試?
答案是肯定的!
單元測(cè)試的好處大家基本都知道,但是很多開(kāi)發(fā)同學(xué)就是不想寫單元測(cè)試代碼,一般有如下理由:
- 需要花費(fèi)太多時(shí)間,寫單元測(cè)試代碼的時(shí)間幾乎和開(kāi)發(fā)正常功能的一樣多,甚至更多;
- 感覺(jué)作用可有可無(wú),并沒(méi)有帶來(lái)太大價(jià)值;
- 自己代碼寫的特別好,bug很少甚至沒(méi)有bug。
其實(shí)這幾種想法都是不對(duì)的,是對(duì)單元測(cè)試的功能沒(méi)有清晰和深刻的認(rèn)識(shí)。
很多開(kāi)發(fā)同學(xué)把功能邏輯代碼寫完,就迫切希望測(cè)試同學(xué)開(kāi)始進(jìn)行測(cè)試,這里忽略了一步,就是開(kāi)發(fā)同學(xué)寫好代碼后肯定是需要先自測(cè)一遍,自測(cè)通過(guò)后才應(yīng)該提測(cè)。如果沒(méi)有單元測(cè)試的話,這一過(guò)程就只能手動(dòng)來(lái)完成,如果反復(fù)改了幾次邏輯,反復(fù)的手動(dòng)自測(cè)成本也是很高的,可能遠(yuǎn)高于寫單元測(cè)試的成本,其實(shí)單元測(cè)試其中一個(gè)作用就是用來(lái)降低自測(cè)成本的。
不管一個(gè)人的開(kāi)發(fā)水平有多高,代碼寫得有多好,難免會(huì)出bug。應(yīng)該使用一套機(jī)制來(lái)快速發(fā)現(xiàn)問(wèn)題,而不是想著依靠某些人的主觀能動(dòng)性來(lái)避免出現(xiàn)問(wèn)題。
單元測(cè)試有如下幾個(gè)顯而易見(jiàn)的好處:
- 提高代碼質(zhì)量:通過(guò)單元測(cè)試,可以確保代碼功能正確,提高整個(gè)項(xiàng)目的代碼質(zhì)量。
- 降低開(kāi)發(fā)成本:?jiǎn)卧獪y(cè)試可以幫助開(kāi)發(fā)人員快速發(fā)現(xiàn)錯(cuò)誤,節(jié)省代碼的開(kāi)發(fā)和維護(hù)成本。
- 簡(jiǎn)化代碼維護(hù):?jiǎn)卧獪y(cè)試用例本身就有文檔的屬性,可以幫助團(tuán)隊(duì)成員更容易理解既有代碼的邏輯。
- 改善團(tuán)隊(duì)合作:在團(tuán)隊(duì)開(kāi)發(fā)中,單元測(cè)試是非常有用的溝通工具,有助于團(tuán)隊(duì)成員間的的溝通和協(xié)作。
小結(jié)
單元測(cè)試是現(xiàn)代軟件開(kāi)發(fā)不可或缺的一部分,可以保障代碼質(zhì)量、縮短開(kāi)發(fā)周期并降低成本。