[譯] Android 上一次編寫,隨處測試

Android_開發者發表於2019-03-15

[譯] Android 上一次編寫,隨處測試

在今年的 Google I/O 大會上,我們推出了 AndroidX Test,作為 Jetpack 的一部分。今天,我們很高興地宣佈 v1.0.0 最終版本和 Robolectric v4.0 一起釋出。作為 1.0.0 版本的一部分,所有 AndroidX Test 現在都是開源的

AndroidX Test 提供了跨測試環境的通用測試 APIs,包括儀器測試和 Robolectric 測試。它包括現有的 Android JUnit 4 支援,Espresso 檢視互動庫和幾個新的金鑰測試 APIs。這些 APIs 可用於在真實和虛擬裝置上進行儀器測試。從 Robolectric 4.0 開始,它們也可用於本地 JVM 測試。

考慮以下使用情形,我們啟動登入頁面,輸入正確的使用者名稱和密碼,並確保進入主螢幕。

@RunWith(AndroidJUnit4::class)
class LoginActivityTest {

  @Test fun successfulLogin() {
    // GIVEN
    val scenario = 
        ActivityScenario.launch(LoginActivity::class.java)

    // WHEN
    onView(withId(R.id.user_name)).perform(typeText(“test_user”))
    onView(withId(R.id.password))
        .perform(typeText(“correct_password”))
    onView(withId(R.id.button)).perform(click())

    // THEN
    assertThat(getIntents().first())
        .hasComponentClass(HomeActivity::class.java)
 }
}
複製程式碼

讓我們逐步完成測試:

  1. 我們使用新的 ActivityScenario API 來啟動 LoginActivity。它將會建立一個 activity,並進入使用者可見並能夠輸入的 resumed 狀態。ActivityScenario 處理與系統的所有同步,併為你應測試的常見場景提供支援,例如你的應用如何處理被系統銷燬和重建。

  2. 我們使用 Espresso 檢視互動庫將文字輸入到兩個文字欄位中,然後點選 UI 中的按鈕。與 ActivityScenario 類似,Espresso 為你處理多執行緒和同步,並提供可讀且流暢的 API 以建立測試。

  3. 我們使用新的 Intents.getIntents() Espresso API 來返回捕獲的意圖列表。然後,我們使用 IntentSubject.assertThat() 驗證捕獲的意圖,這是新的 Android Truth 擴充套件框架的一部分。Android Truth 擴充套件框架提供了一個富有表現力和可讀性的 API 來驗證基本 Android 框架物件的狀態。

這個測試可以在使用 Robolectric 或任何真實或虛擬裝置的本地 JVM 上執行。

要在 Android 裝置上執行它,請將它與以下依賴項一起放在 “androidTest” 資源根目錄中:

androidTestImplementation(“androidx.test:runner:1.1.0”)
androidTestImplementation(“androidx.test.ext:junit:1.0.0”)
androidTestImplementation(“androidx.test.espresso:espresso-intents:3.1.0”)
androidTestImplementation(“androidx.test.espresso:espresso-core:3.1.0”)
androidTestImplementation(“androidx.test.ext:truth:1.0.0”)
複製程式碼

在真實或虛擬裝置上執行可讓你確信你的程式碼可以正確地與 Android 系統進行互動。但是,隨著測試用例數量的增加,你開始犧牲測試執行時間。你可能決定只在真機上執行一些較大的測試,同時在模擬器上執行大量較小的單元測試,比如 Robolectric,它可以在本地 JVM 上更快地執行測試。

要使用 Robolectric 模擬器在本地 JVM 上執行測試用例,請將測試用例放在 “test” 資源根目錄中,將以下程式碼新增到 gradle.build:

testImplementation(“androidx.test:runner:1.1.0”)
testImplementation(“androidx.test.ext:junit:1.0.0”)
testImplementation(“androidx.test.espresso:espresso-intents:3.1.0”)
testImplementation(“androidx.test.espresso:espresso-core:3.1.0”)
testImplementation(“androidx.test.ext:truth:1.0.0”)
testImplementation (“org.robolectric:robolectric:4.0”)

android {
    testOptions.unitTests.includeAndroidResources = true
}
複製程式碼

模擬器和儀器之間測試 apis 的統一提供了許多令人興奮的可能性!我們在 Google I / O 上釋出的 Nitrogen 專案將允許你在執行時環境之間無縫地切換測試。這意味著你將能夠採用針對新的 AndroidX Test APIs 編寫的測試用例,並在本地 JVM、真實或虛擬裝置、甚至基於雲的測試平臺(如 Firebase 測試實驗室)上執行它們。我們非常高興有機會為開發人員提供有關其應用程式質量的快速、準確和可操作的反饋。

最後,我們很高興的宣佈所有的 AndroidX 元件是完全 開源 的,我們期待著你的貢獻。

瞭解更多

文件:developer.android.com/testing

版本註釋:

Robolectric: github.com/robolectric…

AndroidX Test: github.com/android/and…

如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章