- 原文地址: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 如今都是開源的。html
AndroidX Test 提供了跨測試環境的通用測試 APIs,包括儀器測試和 Robolectric 測試。它包括現有的 Android JUnit 4 支持,Espresso 視圖交互庫和幾個新的密鑰測試 APIs。這些 APIs 可用於在真實和虛擬設備上進行儀器測試。從 Robolectric 4.0 開始,它們也可用於本地 JVM 測試。前端
考慮如下使用情形,咱們啓動登陸頁面,輸入正確的用戶名和密碼,並確保進入主屏幕。java
@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)
}
}
複製代碼
讓咱們逐步完成測試:android
咱們使用新的 ActivityScenario API 來啓動 LoginActivity。它將會建立一個 activity,並進入用戶可見並可以輸入的 resumed 狀態。ActivityScenario 處理與系統的全部同步,併爲你應測試的常見場景提供支持,例如你的應用如何處理被系統銷燬和重建。ios
咱們使用 Espresso 視圖交互庫將文本輸入到兩個文本字段中,而後點擊 UI 中的按鈕。與 ActivityScenario 相似,Espresso 爲你處理多線程和同步,並提供可讀且流暢的 API 以建立測試。git
咱們使用新的 Intents.getIntents() Espresso API 來返回捕獲的意圖列表。而後,咱們使用 IntentSubject.assertThat() 驗證捕獲的意圖,這是新的 Android Truth 擴展框架的一部分。Android Truth 擴展框架提供了一個富有表現力和可讀性的 API 來驗證基本 Android 框架對象的狀態。github
這個測試能夠在使用 Robolectric 或任何真實或虛擬設備的本地 JVM 上運行。後端
要在 Android 設備上運行它,請將它與如下依賴項一塊兒放在 「androidTest」 資源根目錄中:api
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 上更快地運行測試。bash
要使用 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 連接。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。