Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.4——使用Espresso测试Activity
问题:
你想要使用Google的Espresso测试Activity。
解决方案:
在Gradle配置里面增加Espresso,书写测试脚本。
讨论:
Espresso测试库已经被添加进“Android Test Kit”项目,作为Google的Android测试工具。因为Espresso是一个Google的项目,并且专门为Android设计,有理由相信它在未来会成为Android测试提供更好的机制。
尽管这不是一本关于测试的书,搭建和运行Espresso测试适合一般的Gradle实践,所以一个简单的例子在这里。
Espresso包括在Android Support Repository里面,可以在SDK Manager的“Extras”下面增加:

为了在项目里面使用Espresso,需要增加androidTestCompile依赖:

这实际上导致了support library的版本冲突,因为Espresso依赖于版本23.1.1,而SDK23里面包含了23.3.0的同样的库。你会收到下面的错误:

尽管这个会在你build应用的时候解决,但是让我们解决这个问题。在顶层的Gradle配置文件里面,allProject块里面强制解决方案:

Espresso要求设置在defaultConfig块里面设置testInstrumentationRunner使用AndroidJUnitRunner:

Espresso测试喜欢使用静态方法,无论是在Espresso类里面还是在Hamcrest matchers。下面的测试清晰的包含了输入的描述:
package com.nfjs.helloworldas;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.MediumTest;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.typeText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.containsString;
@RunWith(AndroidJUnit4.class) @MediumTest
public class MyActivityEspressoTest
extends ActivityInstrumentationTestCase2<MyActivity> {
public MyActivityEspressoTest() {
super(MyActivity.class);
}
@Rule
public ActivityTestRule<MyActivity> mActivityRule =
new ActivityTestRule<>(MyActivity.class);
@Test
public void testHelloWorld() {
onView(withId(R.id.edit_text))
.perform(typeText("Dolly"));
onView(withId(R.id.hello_button))
.perform(click());
onView(withId(R.id.greeting_text))
.check(matches(withText(containsString("Dolly"))));
}
}
简单的语法更关注于用户的行为而不是activity。从这个测试里面,不是很明显的是,点击button实际是从MyAcitivity跳转到WelcomeActivity类,但是实际发生了。结果如下:

再次点击Devices按钮从device角度看结果:

Espresso是一个很有趣的写功能测试的DSL。它在未来会成为推荐的API。
收集测试结果:
如果你的app包含多个flavors或者modules,HTML测试报告将会组织到分离的子目录下面。单独打开每个文件会很麻烦。
幸运的是,有一个插件可以将所有报告收集到一个目录下面。在顶级的配置文件里面,在buildscript块后面加上androidreporting插件:

现在如果你运行mergeAndroidReports任务,所有都会被收集到一个文件里面。

--continue标志是一个标准的Gradle标志,表示构建会继续即使有失败的测试。多个变体运行的结果如下:

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.4——使用Espresso测试Activity的更多相关文章
- Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)
如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...
- Android开发工具全面转向Android Studio(2)——AS project/module的CRUD
本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...
- 配置cordova的android开发环境(无android studio)
原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...
- Android开发之漫漫长途 Ⅰ——Android系统的创世之初以及Activity的生命周期
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>中的相关知识,再次表示该书 ...
- 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。
AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...
- Eclipse搭建Android开发环境并运行Android项目
Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档
问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试
问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App
问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...
随机推荐
- ios8 横屏
iOS8横屏时,状态栏会消失 使用以下代码可以阻止状态栏消失 override func prefersStatusBarHidden() -> Bool { return false }
- 解决 SQL Server2012附加出错的问题
附加数据库出错 无法打开文件号 0 的文件 操作系统错误 根据错误提示:权限不足,添加相应权限就OK 步骤:1,右键单击要附加的数据库,选择安全选项卡选择用户:“Authenticated Users ...
- PL/SQL TOAD 不安装Oracle客户端连接数据库的方法
不安装Oracle客户端连接数据库的方法 本机环境: win7 64位中文旗舰版 一.准备工作: 1)到ORACLE官网下载instantclient,下载地址:http://www.oracle.c ...
- Yii Framework2.0开发教程(3)数据库mysql入门
沿用教程(2)的代码 第一步.在本地mysql数据库中新建数据库zhyoulun 第二步.在数据库中新建表并插入若干条数据 CREATE TABLE `country` ( `code` CHAR(2 ...
- XP win2003系统 微软雅黑字体的使用方法
微软雅黑是微软公司为其新一代操作系统Vista开发的中文字体,据说它将是迄今为止个人电脑上可以显示的最清晰的中文字体. 微软公司表示,在新一代操作系统中为了能够更加清晰的显示文字,目前正在 ...
- 报错"the microsoft.jet.oledb.4.0 provider is not registered on the local machine"解决方案
报错提示:"the microsoft.jet.oledb.4.0 provider is not registered on the local machine" 错误起因:wi ...
- Yii2基础常用笔记
表单验证规则写在model类里,例如: 通过表单输入的值给模型属性填充数据用模型对象的load方法. $model->load(Yii::$app->request->post())
- java printf long
System.out.printf("%d\n", 1000000000000000000L);
- 在Ubuntu中安装mongodb
# 下载密钥文件 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 gpg: 下载密钥‘7F0CEB ...
- iOS崩溃解决记录
Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contai ...