單元測(cè)試是什么
單元測(cè)試是針對(duì)程序的最小單元來(lái)進(jìn)行正確行檢驗(yàn)的測(cè)試工作。程序單元是應(yīng)用的最小可測(cè)試部件强胰。一個(gè)單元可能是單個(gè)程序舱沧、類、對(duì)象偶洋、方法熟吏。
單元測(cè)試的意義
減少bug
快速定位bug
提高代碼質(zhì)量
減少調(diào)試時(shí)間
減少bug
一個(gè)機(jī)器、由各種細(xì)小的零件組成玄窝,如果其中某個(gè)零件壞啦牵寺,機(jī)器運(yùn)行故障。必須保證每個(gè)零件都按設(shè)計(jì)圖要求的規(guī)格恩脂,機(jī)器才能正常運(yùn)行
一個(gè)可單元測(cè)試的工程帽氓、會(huì)把業(yè)務(wù)、功能分割成規(guī)模更小俩块、有獨(dú)立的邏輯部件黎休,稱為單元。單元測(cè)試的目標(biāo)玉凯,就是保證各個(gè)單元的邏輯正確性势腮。單元測(cè)試班長(zhǎng)工程各個(gè)零件按規(guī)格執(zhí)行,從而保證整個(gè)機(jī)器運(yùn)行正確漫仆,最大限度減少bug
提高代碼質(zhì)量
猶豫每個(gè)單元有獨(dú)立的邏輯嫉鲸,做單元測(cè)試時(shí)需要隔離外部依賴,確保這些依賴不影響驗(yàn)證邏輯歹啼。因?yàn)橐迅鞣N依賴分離玄渗,單元測(cè)試會(huì)促進(jìn)工程進(jìn)行組件拆分座菠,整理工程依賴關(guān)系,更大程度減少代碼耦合藤树。這樣寫(xiě)出來(lái)的代碼浴滴,更好維護(hù),更好擴(kuò)展岁钓,從而提高代碼質(zhì)量
快速定位bug升略、減少調(diào)試時(shí)間
如果程序有bug,我們運(yùn)行一次全部單元測(cè)試屡限,找到不通過(guò)的測(cè)試品嚣,可以很快的定位對(duì)應(yīng)的執(zhí)行代碼。修復(fù)代碼后钧大,運(yùn)行對(duì)應(yīng)的單元測(cè)試翰撑,如果還不通過(guò),繼續(xù)修改啊央,運(yùn)行測(cè)試眶诈,知道測(cè)試通過(guò)
對(duì)于Android項(xiàng)目,要測(cè)試某個(gè)功能點(diǎn)瓜饥,不用單元測(cè)試的話逝撬,必須運(yùn)行在真機(jī)上、模擬器上乓土,慢慢的debug找到問(wèn)題點(diǎn)宪潮,運(yùn)行程序到真機(jī),快則半分鐘趣苏,慢則幾分鐘坎炼。Junit只需在本地運(yùn)行即可,就幾秒的事拦键。有時(shí),寫(xiě)那個(gè)功能模塊的員工已離職檩淋,APP出錯(cuò)芬为,你根本不知道調(diào)試哪個(gè)類,如果離職的員工之前寫(xiě)了單元測(cè)試蟀悦,運(yùn)行一下立馬就找到問(wèn)題點(diǎn)了媚朦,單元測(cè)試大大減少調(diào)試時(shí)間,從而達(dá)到節(jié)約時(shí)間成本的效果
放心重構(gòu)
重構(gòu)日戈、每個(gè)開(kāi)發(fā)者都會(huì)經(jīng)歷询张,重構(gòu)后把代碼改壞了的情況并不少見(jiàn)。以往浙炼,寫(xiě)完一個(gè)框架份氧,運(yùn)行app唯袄,沒(méi)什么問(wèn)題,完事蜗帜。由于最初的框架并不是你寫(xiě)的恋拷,可謂牽一發(fā)動(dòng)全身,你改一個(gè)方法導(dǎo)致整個(gè)框架運(yùn)行失敗
如果你有單元測(cè)試厅缺,情況大不同蔬顾。寫(xiě)完一個(gè)類,把單元測(cè)試寫(xiě)啦湘捎,確保這個(gè)類邏輯正確诀豁。寫(xiě)第二個(gè)類,單元測(cè)試窥妇。舷胜。。寫(xiě)100個(gè)類秩伞,道理一樣逞带,每個(gè)類做到第一點(diǎn)保證邏輯正確性。100個(gè)類拼在一起肯定不會(huì)出現(xiàn)問(wèn)題纱新。大可以一邊重構(gòu)一邊運(yùn)行APP展氓,而不是整體重構(gòu)完提心吊膽的運(yùn)行
TDD測(cè)試驅(qū)動(dòng)開(kāi)發(fā)
Test-Driver Development,測(cè)試驅(qū)動(dòng)開(kāi)發(fā)脸爱,是敏捷開(kāi)發(fā)的一項(xiàng)核心實(shí)踐和技術(shù)遇汞,也是一種設(shè)計(jì)方法論。TDD原理是開(kāi)發(fā)功能代碼之前簿废,先編寫(xiě)測(cè)試用例代碼空入,然后針對(duì)測(cè)試用例編寫(xiě)功能代碼,使其能夠通過(guò)族檬。由于TDD對(duì)開(kāi)發(fā)人員要求非常高歪赢,跟傳統(tǒng)開(kāi)發(fā)思維不一樣,因此實(shí)施起來(lái)相當(dāng)困難单料。
測(cè)試驅(qū)動(dòng)開(kāi)發(fā)有好處也有壞處埋凯。因?yàn)槊總€(gè)測(cè)試用例都是根據(jù)需求來(lái)的,或者說(shuō)把一個(gè)大需求分解成若干個(gè)小需求編寫(xiě)測(cè)試用例扫尖,所以測(cè)試用例寫(xiě)出來(lái)后白对,開(kāi)發(fā)這寫(xiě)的執(zhí)行代碼必須滿足測(cè)試用例。如果測(cè)試不通過(guò)换怖,則修改執(zhí)行代碼甩恼,知道測(cè)試用例通過(guò)。
好處:通過(guò)測(cè)試的執(zhí)行代碼,肯定滿足需求条摸,而且有助于與接口編程悦污,降低代碼耦合度,也極大降低bug出現(xiàn)幾率屈溉。
壞處:投入開(kāi)發(fā)資源塞关、由于測(cè)試用例在未進(jìn)行代碼設(shè)計(jì)之前寫(xiě),很有可能限制開(kāi)發(fā)者對(duì)代碼的整體設(shè)計(jì)子巾、可能引起開(kāi)發(fā)人員的不滿情緒帆赢,我覺(jué)得這點(diǎn)很嚴(yán)重,畢竟不是人人都喜歡單元測(cè)試线梗,盡管單元測(cè)試會(huì)給我們帶來(lái)相當(dāng)多的好處
總結(jié)
單元測(cè)試確實(shí)會(huì)給我們帶來(lái)相當(dāng)多的好處椰于,但不是立刻就能體現(xiàn)出來(lái)。正如買(mǎi)重疾保險(xiǎn)仪搔,交了很多保費(fèi)瘾婿,沒(méi)病沒(méi)痛,十幾年甚至幾十年用不上烤咧,最好就是一輩子用不上理賠偏陪,身體健康最重要,單元測(cè)試也是一樣煮嫌,寫(xiě)了可以買(mǎi)個(gè)放心笛谦,對(duì)代碼的一種保障,有bug盡快測(cè)試出來(lái)昌阿,沒(méi)bug更好饥脑。總不能說(shuō):寫(xiě)那么多單元測(cè)試懦冰,結(jié)果測(cè)不出bug灶轰,浪費(fèi)時(shí)間吧