- 原文地址: 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 框架对象的状态。