天天看點

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

2.1 什麼是單元測試

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

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

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

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

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

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

2.2 單元測試不是內建測試

按照開發階段劃分,軟體測試可分為單元測試、內建測試、系統測試和驗收測試。

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

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

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

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單元測試(八):怎樣測試異步代碼