2.1 什么是單元測(cè)試
首先需要弄清楚這個(gè)概念处嫌,到底什么是單元測(cè)試。即便我是計(jì)算機(jī)專業(yè)畢業(yè)的,說(shuō)實(shí)話如果不是專門研究了一段時(shí)間斩个,我也說(shuō)不出一個(gè)所以然來(lái)。以下是百度百科的定義:
單元測(cè)試(unit testing)驯杜,是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證受啥。對(duì)于單元測(cè)試中單元的含義,一般來(lái)說(shuō)鸽心,要根據(jù)實(shí)際情況去判定其具體含義滚局,如C語(yǔ)言中單元指一個(gè)函數(shù),Java里單元指一個(gè)類再悼,圖形化的軟件中可以指一個(gè)窗口或一個(gè)菜單等核畴。總的來(lái)說(shuō)冲九,單元就是人為規(guī)定的最小的被測(cè)功能模塊谤草。單元測(cè)試是在軟件開(kāi)發(fā)過(guò)程中要進(jìn)行的最低級(jí)別的測(cè)試活動(dòng),軟件的獨(dú)立單元將在與程序的其他部分相隔離的情況下進(jìn)行測(cè)試莺奸。
定義很復(fù)雜丑孩,就我個(gè)人理解簡(jiǎn)單點(diǎn)來(lái)說(shuō),主要有以下幾點(diǎn):
- 顧名思義灭贷,單元測(cè)試就是為了測(cè)試某一個(gè)代碼單元而寫的測(cè)試代碼温学。
- 在java等面向?qū)ο笳Z(yǔ)言中,代碼單元就是一個(gè)類的一個(gè)方法甚疟。
所以我對(duì)單元測(cè)試的簡(jiǎn)單理解是:
單元測(cè)試仗岖,就是為了測(cè)試某一個(gè)類里的某一個(gè)方法是否正常執(zhí)行,而寫的測(cè)試代碼览妖。
2.2 單元測(cè)試不是集成測(cè)試
按照開(kāi)發(fā)階段劃分轧拄,軟件測(cè)試可分為單元測(cè)試、集成測(cè)試讽膏、系統(tǒng)測(cè)試和驗(yàn)收測(cè)試檩电。
- 單元測(cè)試:用于驗(yàn)證編碼單元的正確性,以確保每個(gè)模塊能正常工作府树。
- 集成測(cè)試:對(duì)已測(cè)試過(guò)的模塊進(jìn)行組裝俐末,進(jìn)行集成測(cè)試,目的在于檢驗(yàn)與軟件設(shè)計(jì)相關(guān)的程序結(jié)構(gòu)問(wèn)題奄侠。
- 系統(tǒng)測(cè)試:檢驗(yàn)軟件產(chǎn)品能否與系統(tǒng)的其他部分(比如硬件卓箫、數(shù)據(jù)庫(kù)及操作人員)協(xié)調(diào)工作。
- 驗(yàn)收測(cè)試:檢驗(yàn)軟件產(chǎn)品質(zhì)量的最后一道工序垄潮。主要突出用戶的作用丽柿,同時(shí)軟件開(kāi)發(fā)人員也應(yīng)有一定程度的參與恢准。驗(yàn)收測(cè)試可分為Alpha測(cè)試與Beta測(cè)試,Alpha測(cè)試由用戶在開(kāi)發(fā)環(huán)境下完成甫题,Beta測(cè)試由用戶在用戶環(huán)境下完成馁筐。
網(wǎng)上有張圖片能很好的說(shuō)明各測(cè)試階段的側(cè)重點(diǎn)及關(guān)聯(lián)關(guān)系:
由這個(gè)V模型圖片來(lái)看,單元測(cè)試其實(shí)對(duì)應(yīng)的就是我們的編碼階段坠非,所以單元測(cè)試就應(yīng)該是由程序員來(lái)編寫的敏沉。
單元測(cè)試只是測(cè)試一個(gè)方法單元,它的粒度應(yīng)該要足夠小炎码,它不是測(cè)試一整個(gè)操作流程盟迟,整個(gè)流程的測(cè)試應(yīng)該屬于集成測(cè)試或者以上的范疇之內(nèi)了。所以怎么樣定義一個(gè)方法單元潦闲,怎么樣去劃分單元粒度是一個(gè)比較重要的工作攒菠。
舉個(gè)例子:有個(gè)注冊(cè)界面,有用戶名歉闰、密碼辖众、重復(fù)密碼等輸入框,一個(gè)注冊(cè)的Button和敬,點(diǎn)擊Button以后凹炸,有個(gè)UserApi會(huì)去執(zhí)行performRegister操作,根據(jù)返回的結(jié)果判斷是注冊(cè)成功還是失敗昼弟,成功了會(huì)保存注冊(cè)信息等啤它,然后UI上會(huì)跳轉(zhuǎn)到首頁(yè),失敗了給出提示舱痘。我們把這個(gè)流程可以分解出以下這些步驟:
1.輸入用戶名变骡、密碼、確認(rèn)密碼芭逝;
2.點(diǎn)擊注冊(cè)Button進(jìn)行數(shù)據(jù)提交塌碌;
3.對(duì)輸入進(jìn)行校驗(yàn),用戶名铝耻、密碼等是否合規(guī);
4.調(diào)用UserApi的performRegister來(lái)提交數(shù)據(jù)到服務(wù)蹬刷;
5.處理前面一步的返回結(jié)果瓢捉,如果注冊(cè)成功,則保存相關(guān)注冊(cè)信息到本地(例如保存到數(shù)據(jù)庫(kù)办成、SharedPreference等)泡态;
6.UI處理,成功則跳轉(zhuǎn)到成功頁(yè)面迂卢,失敗則給出響應(yīng)提示某弦;
大家看桐汤,僅僅是一個(gè)注冊(cè)的操作,就可以劃分出這么多步驟來(lái)靶壮,對(duì)這整個(gè)注冊(cè)流程的測(cè)試怔毛,應(yīng)該叫集成測(cè)試,而不是單元測(cè)試腾降,單元測(cè)試應(yīng)該是針對(duì)這里面的每一步來(lái)分別測(cè)試的拣度。
2.3小結(jié)
本文介紹了單元測(cè)試的一些相關(guān)定義,以及單元測(cè)試與集成測(cè)試螃壤、系統(tǒng)測(cè)試抗果、驗(yàn)收測(cè)試等的區(qū)別〖榍纾總的來(lái)說(shuō)冤馏,我們要寫單元測(cè)試的時(shí)候,要把握單元的粒度大小寄啼。測(cè)試的單元粒度太大逮光,可能會(huì)導(dǎo)致這個(gè)單元依賴很多外部環(huán)境,如網(wǎng)絡(luò)辕录、存儲(chǔ)睦霎、數(shù)據(jù)庫(kù)等,無(wú)法進(jìn)行有效測(cè)試走诞;測(cè)試的單元粒度太小副女,測(cè)試代碼的工作量會(huì)加大很多,造成沒(méi)必要的浪費(fèi)蚣旱。
系列文章:
Android單元測(cè)試(一):前言
Android單元測(cè)試(二):什么是單元測(cè)試
Android單元測(cè)試(三):測(cè)試難點(diǎn)及方案選擇
Android單元測(cè)試(四):JUnit介紹
Android單元測(cè)試(五):JUnit進(jìn)階
Android單元測(cè)試(六):Mockito學(xué)習(xí)
Android單元測(cè)試(七):Robolectric介紹
Android單元測(cè)試(八):怎樣測(cè)試異步代碼