[译] Android 上一次编写,随处测试

在今年的 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

  1. 咱们使用新的 ActivityScenario API 来启动 LoginActivity。它将会建立一个 activity,并进入用户可见并可以输入的 resumed 状态。ActivityScenario 处理与系统的全部同步,并为你应测试的常见场景提供支持,例如你的应用如何处理被系统销毁和重建。ios

  2. 咱们使用 Espresso 视图交互库将文本输入到两个文本字段中,而后点击 UI 中的按钮。与 ActivityScenario 相似,Espresso 为你处理多线程和同步,并提供可读且流畅的 API 以建立测试。git

  3. 咱们使用新的 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 连接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索