構造用例的原則是測試用例與函數一對一,實現條件覆蓋與路徑覆蓋。Java單元測試中,良好的單元測試是需要保證所有函數執行正確的,即所有邊界條件都驗證過,一個用例只測一個函數,便于維護。在Android單元測試中,并不要求對所有函數都覆蓋到,像Android SDK中的函數回調則不用測試。
Android單元測試
在Android中,單元測試的本質依舊是驗證函數的功能,測試框架也是JUnit。在Java中,編寫代碼面對的只有類、對象、函數,編寫單元測試時可以在測試工程中創建一個對象出來然后執行其函數進行測試,而在Android中,編寫代碼需要面對的是組件、控件、生命周期、異步任務、消息傳遞等,雖然本質是SDK主動執行了一些實例的函數,但創建一個Activity并不能讓它執行到resume的狀態,因此需要JUnit之外的框架支持。
當前主流的單元測試框架AndroidTest和Robolectric,前者需要運行在Android環境上,后者可以直接運行在JVM上,速度也更快,可以直接由Jenkins周期性執行,無需準備Android環境。因此我們的單元測試基于Robolectric。對于一些測試對象依賴度較高而需要解除依賴的場景,我們可以借助Mock框架。
Android單元測試環境配置
Robolectric環境配置
Android單元測試依舊需要JUnit框架的支持,Robolectric只是提供了Android代碼的運行環境。如果使用Robolectric 3.0,依賴配置如下:
Gradle對Robolectric 2.4的支持并不像3.0這樣好,但Robolectric 2.4所有的測試框架均在一個包里,另外參考資料也比較豐富,作者更習慣使用2.4。如果使用Robolectric 2.4,則需要如下配置:
原文轉自:http://tech.meituan.com/Android_unit_test.html