Android單元測試與模擬測試

發表于:2016-05-16來源:推酷作者:Jacks Blog點擊數: 標簽:單元測試
考慮可讀性,對于方法名使用表達能力強的方法名,對于測試范式可以考慮使用一種規范, 如 RSpec-style。 不要使用邏輯流關鍵字(If/ese、for、do/while、switch/case),在一個測試方法中

  考慮可讀性,對于方法名使用表達能力強的方法名,對于測試范式可以考慮使用一種規范, 如 RSpec-style。

  不要使用邏輯流關鍵字(If/ese、for、do/while、switch/case),在一個測試方法中,如果需要有這些,拆分到單獨的每個測試方法里。

  測試真正需要測試的內容,需要覆蓋的情況,一般情況只考慮驗證輸出(如某操作后,顯示什么,值是什么)。

  考慮耗時,Android Studio默認會輸出耗時。

  不需要考慮測試 private 的方法,將 private 方法當做黑盒內部組件,測試對其引用的 public 方法即可。

  盡可能的解耦對于不同的測試方法,不應該存在Test A與Test B存在時序性的情況。

  II. Android自帶基本的單元測試

  control + shift + R (Android Studio 默認執行單元測試快捷鍵)。

  1. 本地單元測試

  直接在開發機上面進行運行測試。在沒有依賴或者僅僅只需要簡單的Android庫依賴的情況下,有限考慮使用該類單元測試。

  代碼存儲

  如果是對應不同的flavor或者是build type,直接在test后面加上對應后綴(如對應名為 myFlavor 的單元測試代碼,應該放在 src/testMyFlavor/java 下面)。

  src/test/java

  激活測試

  在一個功能測試或驗證的測試方法前面添加 @Test 的annotation。

  Google官方推薦引用

  dependencies {

  // Required -- JUnit 4 framework,用于單元測試,google官方推薦

  testCompile 'junit:junit:4.12'

  // Optional -- Mockito framework,用于模擬架構,google官方推薦

  testCompile 'org.mockito:mockito-core:1.10.19'

  }

  2. 模擬測試

  運行在Android設備或者虛擬機上的測試

  主要用于測試: 單元(Android架構引用相關的單元測試)、UI、應用組件集成測試(Service、Content Provider、etc.)

  代碼存儲:

  src/androidTest/java

  Google官方推薦引用

  dependencies {

  androidTestCompile 'com.android.support:support-annotations:23.0.1'

  androidTestCompile 'com.android.support.test:runner:0.4.1'

  androidTestCompile 'com.android.support.test:rules:0.4.1'

  // Optional -- Hamcrest library

  androidTestCompile 'org.hamcrest:hamcrest-library:1.3'

  // Optional -- UI testing with Espresso

  androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'

  // Optional -- UI testing with UI Automator

  androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'

  }

  常見的UI測試

  需要模擬Android系統環境

  主要三點:

  UI加載好后展示的信息是否正確。

  在用戶某個操作后UI信息是否展示正確。

  展示正確的頁面供用戶操作。

  III. 拓展工具

  1. AssertJ Android

  square/assertj-android

  極大的提高可讀性。

  // 一般的JUnit

  assertEquals(View.GONE, view.getVisibility());

  // AssertJ Android

  assertThat(view).isGone();

  2. Robolectric

  Robolectric

  讓模擬測試直接在開發機上完成,而不需要在Android系統上。

  主要是解決模擬測試中耗時的缺陷,模擬測試需要安裝以及跑在Android系統上,也就是需要在Android虛擬機或者設備上面,所以十分的耗時?;旧厦看蝸韥砘鼗囟夹枰獛追昼姇r間。針對這類問題,業界其實已經有了一個現成的解決方案: Pivotal實驗室推出的 Robolectric 。通過使用Robolectrict模擬Android系統核心庫的 Shadow Classes 的方式,我們可以像寫本地測試一樣寫這類測試,并且直接運行在工作環境的JVM上,十分方便。

  3. Mockito

  Mockito

  快速模擬控制系統架構返回參數。

  不同于Roblectric,Mockito可以通過模擬并控制或修改一些方法的行為。

  // 無論什么時候調用 myQueryObject.getCurrentTime,返回值都會是 1363027600

  Mockito.doReturn((long) 1363027600).when(myQueryObject).getCurrentTime();

  4. Robotium

  RobotiumTech/robotium

  (Integration Tests)模擬用戶操作,事件流測試。

  通過模擬用戶的操作的行為事件流進行測試,這類測試無法避免需要在虛擬機或者設備上面運行的。是一些用戶操作流程與視覺顯示強相關的很好的選擇。

原文轉自: http://blog.dreamtobe.cn/2016/05/15/android_test/

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97