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 ...
随机推荐
- 使用 Gradle 实现一套代码开发多个应用
代码地址如下:http://www.demodashi.com/demo/11297.html 在文章 使用 Gradle 对应用进行个性化定制 中,我们能够针对一个应用的正式服.测试服.超管服等其他 ...
- Vue 中的生命周期和钩子函数
生命周期: beforeCreate:el 和 data 并未初始化 (此方法不常用) created:完成了 data 数据的初始化,el的初始化未完成.用来发送ajax beforeMount:( ...
- GitHub的Fork 是什么意思
现在有这样一种情形: 有一个叫做Joe的程序猿写了一个游戏程序,而你可能要去改进它.并且Joe将他的代码放在了GitHub仓库上. 下面是你要做的事情 fork并且更新GitHub仓库的图表演示 Fo ...
- Atitit.检测文本文件的编码 自动获取文件的中文编码
Atitit.检测文本文件的编码 自动获取文件的中文编码 1 不能使用load来检测编码..1 2 使用convert来检测编码1 3 程序检测文本编码2 3.1 根据utf bom头2 3.2 检测 ...
- [k8s]简单启动一个k8s集群
简单启动一个k8s集群 kube-master mkdir -p /root/logs/api-audit /root/logs/controller /root/logs/scheduler kub ...
- rownum浅析
对于 Oracle 的 rownum 问题,非常多资料都说不支持>.>=.=.between...and,仅仅能用以上符号(<.<=.!=),并不是说用>, >=, ...
- 一个简单题,引发的思索 + nyoj 1189
题目描述:第一行:给你两个数m和n,m表示有m个数,然后下一行输入m个数,每个数只能选择一次,统计共有多少种情况使得所选数的和大于等于n: 解决本题我想到了两种方法,(题目自己想的,先不考虑超时),第 ...
- HDU 1867 A + B for you again(KMP算法的应用)
A + B for you again Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- java性能监控工具:jmap命令详解
.命令基本概述 Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本.打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数 ...
- VirtualBox下Linux加载Windows的共享目录
1.Windows下,在VirtualBox安装增强功能. 菜单 -> 设备 -> 安装增强功能 2.Windows下,在VirtualBox设置共享目录. 设置 -> 共享文件夹 ...