Android單元測(cè)試(二):什么是單元測(cè)試

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è)試是在軟件開發(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è)試

按照開發(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í)軟件開發(fā)人員也應(yīng)有一定程度的參與。驗(yàn)收測(cè)試可分為Alpha測(cè)試與Beta測(cè)試,Alpha測(cè)試由用戶在開發(fā)環(huán)境下完成,Beta測(cè)試由用戶在用戶環(huán)境下完成。

網(wǎng)上有張圖片能很好的說(shuō)明各測(cè)試階段的側(cè)重點(diǎn)及關(guān)聯(lián)關(guān)系:


V模型

由這個(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è)試異步代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容