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

2.1 什么是單元測試

首先需要弄清楚這個概念,到底什么是單元測試。即便我是計算機專業畢業的,說實話如果不是專門研究了一段時間,我也說不出一個所以然來。以下是百度百科的定義:

單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。對于單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函數,Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。總的來說,單元就是人為規定的最小的被測功能模塊。單元測試是在軟件開發過程中要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。

定義很復雜,就我個人理解簡單點來說,主要有以下幾點:

  • 顧名思義,單元測試就是為了測試某一個代碼單元而寫的測試代碼。
  • 在java等面向對象語言中,代碼單元就是一個類的一個方法。

所以我對單元測試的簡單理解是:

單元測試,就是為了測試某一個類里的某一個方法是否正常執行,而寫的測試代碼。

2.2 單元測試不是集成測試

按照開發階段劃分,軟件測試可分為單元測試、集成測試、系統測試和驗收測試。

  • 單元測試:用于驗證編碼單元的正確性,以確保每個模塊能正常工作。
  • 集成測試:對已測試過的模塊進行組裝,進行集成測試,目的在于檢驗與軟件設計相關的程序結構問題。
  • 系統測試:檢驗軟件產品能否與系統的其他部分(比如硬件、數據庫及操作人員)協調工作。
  • 驗收測試:檢驗軟件產品質量的最后一道工序。主要突出用戶的作用,同時軟件開發人員也應有一定程度的參與。驗收測試可分為Alpha測試與Beta測試,Alpha測試由用戶在開發環境下完成,Beta測試由用戶在用戶環境下完成。

網上有張圖片能很好的說明各測試階段的側重點及關聯關系:


V模型

由這個V模型圖片來看,單元測試其實對應的就是我們的編碼階段,所以單元測試就應該是由程序員來編寫的。
單元測試只是測試一個方法單元,它的粒度應該要足夠小,它不是測試一整個操作流程,整個流程的測試應該屬于集成測試或者以上的范疇之內了。所以怎么樣定義一個方法單元,怎么樣去劃分單元粒度是一個比較重要的工作。
舉個例子:有個注冊界面,有用戶名、密碼、重復密碼等輸入框,一個注冊的Button,點擊Button以后,有個UserApi會去執行performRegister操作,根據返回的結果判斷是注冊成功還是失敗,成功了會保存注冊信息等,然后UI上會跳轉到首頁,失敗了給出提示。我們把這個流程可以分解出以下這些步驟:
1.輸入用戶名、密碼、確認密碼;
2.點擊注冊Button進行數據提交;
3.對輸入進行校驗,用戶名、密碼等是否合規;
4.調用UserApi的performRegister來提交數據到服務;
5.處理前面一步的返回結果,如果注冊成功,則保存相關注冊信息到本地(例如保存到數據庫、SharedPreference等);
6.UI處理,成功則跳轉到成功頁面,失敗則給出響應提示;
大家看,僅僅是一個注冊的操作,就可以劃分出這么多步驟來,對這整個注冊流程的測試,應該叫集成測試,而不是單元測試,單元測試應該是針對這里面的每一步來分別測試的。

2.3小結

本文介紹了單元測試的一些相關定義,以及單元測試與集成測試、系統測試、驗收測試等的區別。總的來說,我們要寫單元測試的時候,要把握單元的粒度大小。測試的單元粒度太大,可能會導致這個單元依賴很多外部環境,如網絡、存儲、數據庫等,無法進行有效測試;測試的單元粒度太小,測試代碼的工作量會加大很多,造成沒必要的浪費。

系列文章:
Android單元測試(一):前言
Android單元測試(二):什么是單元測試
Android單元測試(三):測試難點及方案選擇
Android單元測試(四):JUnit介紹
Android單元測試(五):JUnit進階
Android單元測試(六):Mockito學習
Android單元測試(七):Robolectric介紹
Android單元測試(八):怎樣測試異步代碼

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。