android測試有多重要!

我們開發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這方面的作用,這可能是大家覺得單元測試最大的作用。然而我覺得,除了這方面的作用,單元測試還能在很大程度上改善代碼的設計,同時還能節約時間,讓人工作起來更自信、更開心,以及其他的一些好處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章