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 ...
随机推荐
- Linux程序员福利 - 追女友神奇(Linux终端运行炫酷程序)
概述 作为IT人员,给同事的感觉呆板,不会会浪漫,不懂情趣.其实不然,我们可以用我们的技能创造出IT人员独有的浪漫.girlLove脚本就可以实现IT人员的浪漫.girlLove本质上是一个简易的问答 ...
- 仿网易/QQ空间视频列表滚动连播炫酷效果
代码地址如下:http://www.demodashi.com/demo/11201.html 一.准备工作 AndroidStudio 开发环境 需要下载七牛的开源播放器SDK 本例子实现了仿网易/ ...
- 电子商务(电销)平台中订单模块(Order)数据库设计明细(转载)
电子商务(电销)平台中订单模块(Order)数据库设计明细 以下是自己在电子商务系统设计中的订单模块的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 订单表 (order)|-- ...
- Linux - 进程控制 代码(C)
进程控制 代码(C) 本文地址:http://blog.csdn.net/caroline_wendy 输出进程ID.getpid(). 代码: /*By C.L.Wang * Eclipse CDT ...
- socket 통신
00.C# --> Application.ThreadException --> Application.Run --> Container --> Application. ...
- Java中的四种引用类型,强引用,软引用,弱引用,虚引用
对于Java中的垃圾回收机制来说,对象是否被回收的标准在于该对象是否被引用.因此,引用也是JVM进行内存管理的一个重要概念. Java中对象的引用一般有以下4种类型: 1强引用 2软引用 3弱引用 ...
- [ tarjan + dfs ] poj 2762 Going from u to v or from v to u?
题目链接: http://poj.org/problem?id=2762 Going from u to v or from v to u? Time Limit: 2000MS Memory L ...
- PHP命名空间规则解析及高级功能3
PHP命名空间规则解析及高级功能 -- : 来源:中国站长站综合 编辑:水色皇朝[纠错]1人评论 A-A+ 怎么开淘宝店 网站优化方法 创业如何获得投资 怎么做微商 最新LOL活动 日前发布的PHP ...
- layui中当悬浮在select的option上面是给不同的提示;
$(document).on('mouseenter', '#paramsFather .layui-form-selected dl dd', function () { var data = $( ...
- Oracle之标示符无效
一.引言 今天使用Oracle客户端执行一条sql语句 order by colname3 结果一直提示标示符无效,以为是自己把列名写错了打开表的列,一个字母一个字母的比对,还是没有错 二.原因及解决 ...