- 原文地址:Write Once, Run Everywhere Tests on Android
- 原文作者:Jonathan Gerrish
- 譯文出自:掘金翻譯計劃
- 本文永久連結:github.com/xitu/gold-m…
- 譯者:Rickon
- 校對者:xiaxiayang
在今年的 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)
}
}
複製程式碼
讓我們逐步完成測試:
-
我們使用新的 ActivityScenario API 來啟動 LoginActivity。它將會建立一個 activity,並進入使用者可見並能夠輸入的 resumed 狀態。ActivityScenario 處理與系統的所有同步,併為你應測試的常見場景提供支援,例如你的應用如何處理被系統銷燬和重建。
-
我們使用 Espresso 檢視互動庫將文字輸入到兩個文字欄位中,然後點選 UI 中的按鈕。與 ActivityScenario 類似,Espresso 為你處理多執行緒和同步,並提供可讀且流暢的 API 以建立測試。
-
我們使用新的 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
版本註釋:
- AndroidX Test: developer.android.com/training/te…
- Robolectric: github.com/robolectric…
Robolectric: github.com/robolectric…
AndroidX Test: github.com/android/and…
如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。
掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。