在Android Studio中进行单元测试(攻略二)

android studio 下载 | 2018-09-22 07:27

【一、Espresso简介】

Espresso是Google官方的android单元测试框架之一,很强大,测试代码简洁。

Espresso运行在真机上,因此android任何代码都能运行,缺点是由于运行在真机,不能避免“慢”。

Espresso测试框架提供了一组API来构建UI测试,用于测试应用中的用户流。利用这些API,可以编写简洁、运行可靠的自动化UI测试。

Espresso测试框架的主要功能包括:

(1).   灵活的API,用于目标应用中的视图和适配器匹配。

(2).   一组丰富的操作API,用于自动化UI交互。

(3).   UI线程同步,用于提升测试可靠性。

Espresso在Androidstudio中集成:

自AndroidStudio2.2版本开始,google就在Android Studio中集成了Record Espresso Test功能,可以利用Espresso测试记录器自动生成Espresso测试。

【二、测试流程及配置】

1、Espresso提供的基本API

(1).ViewMatchers

(2).ViewActions

(3).ViewAssertions

顾名思义,测试规则,官方的解释是你可以在该注解下引用一个规则或定义一个方法;publicActivityTestRulemActivityRule=newActivityTestRule<>(MainActivity.class);

这句话就定义了一个测试规则,可以看到构造方法的参数里指定了一个MainActivity.class,具体的体现就是当你运行这段测试代码时,app将会直接打开MainActivity界面然后进行你所定义的测试用例。所以当你想直接测试某个界面时,你可以把那个界面填到这个参数里,这样就直接打开你指定的界面进行测试了。

该注解用来定义一个测试用例,当你的测试类运行时,所执行的代码就是Test注解下的(Espresso还提供了其他的一些注解,比如:@After、@Before等)。

3、Espresso测试基本流程

(1).找到到具体的View

无论是通过withId()找控件还是通过withText()找控件或者其他方式比如withClassName(),withResourceName(),withTagKey()等方法,都要一定保证你所找的控件在当前页面确实存在且可见,不然会报:NoMatchingViewException。

如果你要测试AdapterView,比如ListView或GridView等,使用上面的onView()方法是无效的,因为AdapterView的布局item是动态呈现的,没法直接指定,所以当你要测试AdapterView时,请把onView()方法换成onData()方法,与onView()方法返回ViewInteraction类似,onData()方法返回DataInteraction,二者用法基本都是一样的。

(2).执行一个操作

ViewActions

perform()参数中常用的方法:

click():返回一个点击action,Espresso利用这个方法执行一次点击操作;

clearText():返回一个清除指定view中的文本action;

swipeLeft():返回一个从右往左滑动的action;

swipeRight():返回一个从左往右滑动的action;

swipeDown():返回一个从上往下滑动的action;

swipeUp():返回一个从下往上滑动的action;

closeSoftKeyboard():返回一个关闭输入键盘的action;

pressBack():返回一个点击手机上返回键的action;

doubleClick():返回一个双击action;

longClick():返回一个长按action;

scrollTo():返回一个移动action;

replaceText():返回一个替换文本action;

openLinkWithText():返回一个打开指定链接action;

ViewMatchers

onView(withId(R.id.textView)).check(matches(withText("Hello,World!")));

含义:根据id“textView”找到这个控件然后检查该控件上面显示的文本是不是”Hello,World!”.

4、Android测试支持库配置

在Gradle项目中使用Android测试支持库,需在build.gradle文件中添加依赖关系,在AndroidStudio2.2+的版本,新建的Project中会自动为开发者添加Espresso自动化测试库的依赖:

【三、录制用例-记录Espresso测试】

Espresso测试由两个主要部分组成:界面交互和View元素断言。

(1).   界面交互包括用户可以用来与您的应用交互的点按和键入操作。

(2).   断言旨在验证视觉元素的内容是否存在于屏幕上。

要开始使用Espresso测试记录器记录测试,请执行以下操作:

(1).   AndroidStudio菜单栏,点击Run>RecordEspressoTest。

(2).   在SelectDeploymentTarget窗口中,选择您想要在上面记录测试的设备。

(3).   Espresso测试记录器可以触发项目的构建,在Espresso测试记录器允许您与应用交互之前,必须先安装并启动应用。记录的交互,将显示在Record Your Test窗口的主面板中,如下图所示。在运行测试时,Espresso测试将尝试以相同顺序执行这些操作。

断言可以通过三种主要类型验证某个View元素是否存在或者它的内容:

(1).   Text is:检查已选定View元素的文本内容;

(2).   exists:检查View元素是否存在于屏幕上可见的当前View层次结构中;

(3).   does not exist:检查View元素是否不存在于当前View层次结构中;

测试添加断言,执行以下操作:

(1).    点击Add Assertion。在Espresso获取界面层次结构和当前应用状态的其他相关信息时,将显示一个Screen Capture对话框。该对话框将在Espresso捕获屏幕截图后自动关闭。

(2).    当前屏幕的布局将显示在Record Your Test窗口右侧的面板中。要选择将要在它上面创建断言的View元素,请点击屏幕截图中的元素,或者使用窗口底部Edit assertion框中的第一个下拉菜单。选定的View对象将突出显示在红框中。

(3).    从Edit assertion框的第二个下拉菜单中选择想要使用的断言。Espresso将使用选定View元素的有效断言填充菜单。如果您选择“text is”断言,Espresso将自动插入选定View元素中当前存在的文本。可使用Edit assertion框中的文本字段编辑文本,匹配所需断言。

(4).    点击Save and Add Another创建另一个断言,或者点击Save Assertion关闭断言面板。

完成与应用的交互并添加断言后,请按照下面的步骤操作,保存记录并生成Espresso测试:点击Complete Recording,显示Pick a test class name for your test窗口。

Espresso测试记录器会根据已启动Activity的名称在其软件包内为您的测试提供一个唯一名称。更改名称,建议用Test class name字段,点击Save。

文件将在Espresso测试记录器生成它后自动打开,Android Studio将显示在IDE的Project窗口中选择的测试类。

【四、在本地运行Espresso测试】

要运行Espresso测试,请使用Android Studio IDE左侧的Project窗口:

(1). 打开所需的应用模块文件夹并选择您想要运行的测试。测试的保存位置取决于测试根目录的位置及已启动Activity的软件包名称。src>androidTest>java>packagename文件夹中。

例如小编的用例,在\src\androidTest\java\com\sogou\map\android\maps目录下。

或者,您也可以打开测试文件,然后右键点击生成的测试类或函数。

(3). 在Select Deployment Target窗口中,选择您想要在上面运行测试的设备。

在IDE底部的Run窗口中监控测试的进度。Android Studio将为您的项目运行完整构建并在Run窗口中打开一个包含您的测试名称的标签,如下图所示。您可以在这个标签中查看测试是通过还是失败,以及测试的运行时长。在测试完成时,标签将记录“Tests ran to completion.”。

Espresso,可以理解成进行测试的时候,在测试设备上面安装了两个apk(开发者一般的apk和AndroidTest apk),然后模拟操作(比如点击按钮,滑动列表等等)在界面上,将开发者预期的结果和实际的结果进行对比。