问题:

你想要使用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的更多相关文章

  1. Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)

    如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...

  2. Android开发工具全面转向Android Studio(2)——AS project/module的CRUD

    本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...

  3. 配置cordova的android开发环境(无android studio)

    原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...

  4. Android开发之漫漫长途 Ⅰ——Android系统的创世之初以及Activity的生命周期

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>中的相关知识,再次表示该书 ...

  5. 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。

    AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...

  6. Eclipse搭建Android开发环境并运行Android项目

    Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...

  7. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档

    问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...

  8. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试

    问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...

  9. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App

    问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...

随机推荐

  1. 一个完全摆脱findViewById的自动绑定库

    代码地址如下:http://www.demodashi.com/demo/13504.html 问题 先来看一个正常的写法: <?xml version="1.0" enco ...

  2. c++继承总结

    继承 1)继承是面向对象程序设计实现软件重用的重要方法.程序猿能够在已有基类的基础上定义新的派生类. 2) 单继承的派生类仅仅有一个基类.多继承的派生类有多个基类. 3) 派生类对基类成员的訪问由继承 ...

  3. Objective-C之定义函数

    Demo1.m 一个基础的函数定义 #import<Foundation/Foundation.h> //定义一个返回值为int类型的,名为max的函数.传入的参数为两个int型数据 in ...

  4. (MVC)从客户端中检测到有潜在危险的 Request.Form 值

    在传统的.net Request验证中 ,只需要在WebConfig HttpRuntime节点 加入 RequestValidateMode 属性,值为2.0(此处2.0并非Framework版本) ...

  5. javascript 反调试 监听用户打开了Chrome devtool

    let div = document.createElement('div'); let loop = setInterval(() => {     console.log(div);     ...

  6. Android架构须知

    1.了解不同版本号的特性包含IDE的. 如:AsyncTask3.0之后和之前的差别.Android 5.0的新的API.Android 6.0 不能用HttpClient .AS2.0的新特性 等等 ...

  7. vivado笔记

    Vivado主界面 Vivado套件,相当于把ISE.ISim.XPS.PlanAhead.ChipScope和iMPACT等多个独立的套件集合在一个Vivado设计环境中,在这个集合的设计流程下,不 ...

  8. oracle 12c grid db 安装的的checklist

    oracle 12c 安装 checklist 关闭 iptables NetworkManager selinux service iptables stop chkconfig iptables ...

  9. [NM 状态机1] Application状态机详解

    概述 前面已经分析了RM的状态机,接下来将分析NM的状态机,NM状态机包括Container,Application,LocalizedResource三个.首先我们分析Application的状态机 ...

  10. CCNA2.0笔记_ipv6的EIGRP

    IPv6的eigrp特征: 邻居发现 增量更新 快速收敛 负载均衡 三个表 -邻居表 -拓扑表 -路由表 配置ipv6的eigrp Router(config)#ipv6 unicast-routin ...