返回

剖析 Android UI 测试:入门 Espresso

Android

利用 Espresso 提升 Android UI 测试的精湛技艺

在敏捷开发流程的快节奏世界中,自动化 UI 测试已成为确保移动应用程序质量和可靠性的至关重要的组成部分。在 Android 领域,Espresso 以其稳定性和易用性脱颖而出,成为 UI 测试的首选。

Espresso 的 UI 测试组件

Espresso 围绕三个关键组件构建其 UI 测试框架:

  • ViewMatcher: 允许验证特定 View 的属性(例如,文本内容、状态)。
  • ViewAction: 允许模拟用户交互(例如,文本输入、按钮单击)。
  • IdlingResource: 确保 UI 线程上的后台任务完成,避免测试因竞争条件而失败。

编写 Espresso 测试的步骤

第一步:集成 Espresso

在 app 级的 Gradle 文件中添加 Espresso 依赖项:

androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.1'

验证 View 状态

// 检查文本字段中是否存在"嗨"这个文本
onView(withId(R.id.myTextField))
    .check(Matchers.withText("嗨"));

模拟用户交互

// 模拟在按钮上单击
onView(withId(R.id.myButton))
    .perform(ViewAction.click());

确保线程就绪

// 检查进度条加载完毕
IdlingResource idlingResource = new SimpleIdlingResource() {
  @Override
  public boolean isIdleNow() {
    // 根据进度条的 isVisible() 方法判定进度条已加载完毕
    return !myProgressBar.isVisible();
  }
};

// 等待直到进度条加载完毕,让 UI 线程就绪
waitForAsync(idlingResource, Timeouts.ASYNC_UI_TIMEOUT);

可复用 Helper 方法

编写可复用的方法可以封装通用 UI 交互,提高可管理性和可读性。例如,为“单击”交互创建扩展方法:

// 为 ViewAction.click() 创建扩展方法
public static ViewAction myClick() {
  return new ViewAction() {
    @Override
    public void perform(View view) {
      // 调用原生的 ViewAction.click() 方法
      ViewAction.click().perform(view);
    }

    @Override
    public String getDescription() {
      return "对你自己的 click() 方法";
    }
  };
}

最佳实战

  • 保持原子性: 每个测试用例应专注于一个特定用例。
  • 简洁明了: 标题和应准确反映用例的目的。
  • 充分注释: 注释每个 UI 交互和验证点。
  • 使用 UI 层次查看器: 直观地检查应用程序的 View 层次结构。
  • 自动化重复性工作: 编写可复用的 Helper 方法。

结论

掌握 Espresso 的 UI 测试组件并遵循最佳实战,你将能够编写出可靠、可读性和可扩展的 Android UI 测试。这将大大提升您的移动应用程序的质量和可靠性,确保为您的用户提供最佳体验。

常见问题解答

  • Q:如何集成 Espresso?

  • A:在 app 级的 Gradle 文件中添加 Espresso 依赖项。

  • Q:ViewMatcher 和 ViewAction 有什么区别?

  • A:ViewMatcher 用于验证 View 属性,而 ViewAction 用于模拟用户交互。

  • Q:如何确保 UI 线程就绪?

  • A:使用 IdlingResource 暂停测试,直到后台任务完成。

  • Q:为什么使用可复用 Helper 方法?

  • A:可复用 Helper 方法可以减少重复性工作并提高可读性。

  • Q:编写好的 Espresso 测试有哪些技巧?

  • A:保持原子性、简洁性、充分注释、利用工具和自动化重复性工作。