安卓程序员都懂:如何用Espresso对UI界面测试?

如果想学习使用Espresso测试Android应用程序UI,需要了解包括基础知识,AdapterViews,RecyclerViews等方面的知识,本文将是一份不错的教程。

作者写了关于Espresso的基础知识,以及如何设置和使用。介绍了一些编写测试用例时可能需要的基本测试,如何测试不属于默认窗口层次的视图,同时测试AdapterViews&RecyclerViews。最后,介绍如何编写自定义匹配器和失败处理程序。

基本测试

先来看看可能需要写的一些常见测试:

安卓程序员都懂:如何用Espresso对UI界面测试?

按照上面的模式,根据要求编写测试用例:

在默认窗口层次结构之外测试视图

可能有几种情况需要测试不属于默认窗口层次结构的视图。例如,测试可能使用WindowManager呈现的视图:

安卓程序员都懂:如何用Espresso对UI界面测试?

测试一个AdapterView

现在继续进行AdapterView测试。为了测试AdapterView,Espresso提供了一个单独的onData()入口,在对其本身或其子进行任何操作之前,首先对适配器项目进行测试。如果要测试一个AdapterView,需要使用onData()方法而不是onView()方法。

安卓程序员都懂:如何用Espresso对UI界面测试?

可以在中找到可用的ObjectMatcher,DataOptions,ViewAction和ViewAssertion的完整列表。

下面是一个简单的例子,找到一个匹配单词"Espresso"的String类型列表项并对它执行click()事件:

安卓程序员都懂:如何用Espresso对UI界面测试?

下面的例子将找到具有内容"item content:10"的列表项目,并且在其具有id R.id.item_id的子视图上执行点击事件:

安卓程序员都懂:如何用Espresso对UI界面测试?

测试一个RecyclerView

由于RecyclerView对象的行为与AdapterView对象的行为不同,所以不能使用onData()来测试RecyclerView对象。

如果要测试RecyclerView,需要添加espresso-contrib包依赖项。这个软件包包含一个RecyclerViewActions的集合,可以使用它来滚动到位置或对这些项目执行操作。

要使用Espresso与RecyclerView进行交互,可以使用espresso-contrib软件包(在app / build.gradle中添加"com.android.support.test.espresso:espresso-contrib:2.2.2"依赖项) RecyclerViewActions可用于滚动到位置或对项目执行操作。该集合包括以下RecylerViewActions:

·scrollTo() - 此RecyclerViewActions滚动到匹配的视图。

·scrollToHolder() - 此RecyclerViewActions滚动到匹配的视图持有者。

·scrollToPosition() - 此RecyclerViewActions滚动到一个特定的位置。

·actionOnHolderItem() - 此RecyclerViewActions在匹配的View Holder上执行View Action。

·actionOnItem() - 此RecyclerViewActions在匹配的View上执行View Action。

·actionOnItemAtPosition() - 此RecyclerViewActions在特定位置的视图上执行ViewAction。

我们来看一个测试RecyclerView的例子:

安卓程序员都懂:如何用Espresso对UI界面测试?

上面的例子将首先找到ID为R.id.rv_espresso的RecyclerView,然后滚动到第五个位置并在该项目上执行一个单击事件。

同样,我们也可以使用其他的RecyclerViewActions。

现在看看如何测试一个自定义RecyclerView,例如ExpandableRecyclerView。考虑一下,当需要测试可展开视图的子视图的情况。

首先,编写一个可以执行的自定义操作:

安卓程序员都懂:如何用Espresso对UI界面测试?

现在,在子视图上执行这个操作:

安卓程序员都懂:如何用Espresso对UI界面测试?

现在来看看如何编写和使用Custom Matcher和Custom Failure Handler。

Custom Matcher & FailureHandler

在编写测试用例时,可能需要实现Custom Matcher或者Custom Failure Handler,因为在某些情况下,缺省的处理器可能不足够。

1.Custom Matcher

有些情况下,默认的可用匹配器可能是不够的。在这种情况下,需要编写我们自己的匹配器。考虑一个情况,当需要检查EditText中的文本是否与正则表达式匹配时,由于没有默认的匹配器做这个工作,所以需要程序员自己实现。

我们来看看如何编写一个用于验证模式的Custom Matcher

安卓程序员都懂:如何用Espresso对UI界面测试?

使用这个匹配器:

安卓程序员都懂:如何用Espresso对UI界面测试?

2.Custom Failure Handler

有些情况下,我们可能想要处理一些Espresso抛出的异常,并自定义一些实现,比如记录一些可能更有意义的额外数据。

安卓程序员都懂:如何用Espresso对UI界面测试?

在已经写了一个custom failure handler程序之后,我们需要这样设置它:

安卓程序员都懂:如何用Espresso对UI界面测试?

这就是如何为不同的组件编写基本的测试用例。作者希望这篇文章能够激励程序员为应用程序编写测试用例。起初,这可能是困难的,但一旦掌握了它,将是非常有用的。

你认为这份教程怎么样呢?如果你有更好的想法,欢迎在评论区留言!