android測試有多重要!

Dusan_杜小菜發表於2016-05-21

我們開發android,用模擬器除錯,真機除錯,手動點選操作APP,發現bug又進行繁瑣反覆的測試,效率有多低,多費勁。有沒有考慮過自己寫單元測試?如何寫?你知道有哪些測試框架嗎?以下內容分享自網路部落格的一些總結:

一,認識單元測試

處於高速迭代開發中的Android專案往往需要除黑盒測試外更加可靠的質量保障,這正是單元測試的用武之地。單元測試周期性對專案進行函式級別的測試,在良好的覆蓋率下,能夠持續維護程式碼邏輯,從而支援專案從容應對快速的版本更新。
單元測試是參與專案開發的工程師在專案程式碼之外建立的白盒測試工程,用於執行專案中的目標函式並驗證其狀態或者結果,其中,單元指的是測試的最小模組,通常指函式。

與Java單元測試相同,Android單元測試也是維護程式碼邏輯的白盒工程,但由於Android執行環境的不同,Android單元測試的環境配置以及實施流程均有所不同。

二,Android單元測試

在Android中,單元測試的本質依舊是驗證函式的功能,測試框架也是JUnit。在Java中,編寫程式碼面對的只有類、物件、函式,編寫單元測試時可以在測試工程中建立一個物件出來然後執行其函式進行測試,而在Android中,編寫程式碼需要面對的是元件、控制元件、生命週期、非同步任務、訊息傳遞等,雖然本質是SDK主動執行了一些例項的函式,但建立一個Activity並不能讓它執行到resume的狀態,因此需要JUnit之外的框架支援。
當前主流的單元測試框架AndroidTest和Robolectric,前者需要執行在Android環境上,後者可以直接執行在JVM上,速度也更快,可以直接由Jenkins週期性執行,無需準備Android環境。因此我們的單元測試基於Robolectric。對於一些測試物件依賴度較高而需要解除依賴的場景,我們可以藉助Mock框架。

三,JUnit4+Mockito單元測試

很多Android開發的同學,不瞭解單元測試。對於不是測試專業出身、又沒技術大牛調教過的程式猿,缺乏單元測試知識,比比皆是。
如果你學會寫Junit單元測試,可以直接對單個Presenter、Service編譯執行,不需要關心是否受到其他類的程式碼or網路環境、伺服器是否正常的影響。執行一下就幾秒鐘,Junit和Mockito的錯誤提示,還讓你快速定位問題。

四,Robolectric測試框架

Robolectric支援單元測試範圍從Activity的跳轉、Activity展示View(包括選單)和Fragment到View的點選觸控以及事件響應,同時Robolectric也能測試Toast和Dialog。對於需要網路請求資料的測試,Robolectric可以模擬網路請求的response。對於一些Robolectric不能測試的物件,比如ConcurrentTask,可以通過自定義Shadow的方式現實測試。

五,測試的重要性和必要性

不僅需要學習,而且你要學習的東西還真不少,你要學習JUnit的使用,你要學習Mokito的使用,Robolectric的使用,依賴注入的概念和使用等等等待。此外,在剛開始的時候,你的確也會遇到很多坑,現有程式碼的坑,Android的坑,Robolectric的坑等等。這個在安卓開發這邊顯得更是如此,因為Android開發環境是公認的最不利用寫單元測試的環境之一。你需要花一些時間去學習如何處理,或者是繞過這些坑。
很多人都能承認、也能理解單元測試在保證程式碼質量,防止bug或儘早發現bug這方面的作用,這可能是大家覺得單元測試最大的作用。然而我覺得,除了這方面的作用,單元測試還能在很大程度上改善程式碼的設計,同時還能節約時間,讓人工作起來更自信、更開心,以及其他的一些好處。

相關文章