专栏首页Android 开发者[译] Android 上一次编写,随处测试

[译] 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前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • app 里的 A/B 测试简介

    Android 开发者
  • [译]Android 生命周期备忘录 — 第一部分:单一 Activities

    Android 开发者
  • Constraint Layout 2.0 用法详解

    Constraint Layout 是最受欢迎的 Jetpack 库之一,它的 2.0 正式版本也发布啦 (目前最新版本 2.1.0-alpha1)!也许您已熟...

    Android 开发者
  • TW洞见 | 我和敏捷团队的五个约定

    我——作为一名测试人员——有一个与众不同的习惯:每当要加入一个新项目的时候,我总会找到项目中的同伴,真诚而亲切地说:“为了更好地合作,我有5个约定,希望大家能尽...

    ThoughtWorks
  • TW洞见 | 我和敏捷团队的五个约定

    今日洞见 文章作者来自ThoughtWorks: 覃其慧。 本文转载自InfoQ:http://www.infoq.com/cn/articles/though...

    ThoughtWorks
  • PHP PDO & Injection Bypass

    PDO默认支持多语句查询,如果php版本小于5.5.21或者创建PDO实例时未设置PDO::MYSQL_ATTR_MULTI_STATEMENTS为false时...

    贝塔安全实验室
  • 本体技术视点 | 可以把工作邮箱作为公钥吗?

    在正式介绍 Celo 的基于地址加密方法前,让我们回想一下从用户角度来看 BTC 或者 ONT 等如何进行转账。假设 Alice 向本体新用户 Bob 转移1 ...

    本体Ontology
  • [python]运算符 >>

    “>> 右移,高位补符号位” 这里右移一位表示除2“>>> 无符号右移,高位补0”;

    py3study
  • 益生菌真的百利而无一害吗?了解益生菌的潜在风险

    说到益生菌相信大家应该都不陌生,去超市里买酸奶,总是先要看看成分表里加没加双歧杆菌、乳杆菌。那么益生菌到底有什么用处,又有什么我们不知道的潜在危害呢?人用益生菌...

    用户6317549
  • spring+hibernate+struts2+compass整合

    http://www.cnblogs.com/hongten/gallery/image/113449.html

    Hongten

扫码关注云+社区

领取腾讯云代金券