安卓程序员都懂:如何用Espresso对UI界面测试?
如果想学习使用Espresso测试Android应用程序UI,需要了解包括基础知识,AdapterViews,RecyclerViews等方面的知识,本文将是一份不错的教程。
作者写了关于Espresso的基础知识,以及如何设置和使用。介绍了一些编写测试用例时可能需要的基本测试,如何测试不属于默认窗口层次的视图,同时测试AdapterViews&RecyclerViews。最后,介绍如何编写自定义匹配器和失败处理程序。
基本测试
先来看看可能需要写的一些常见测试:
按照上面的模式,根据要求编写测试用例:
在默认窗口层次结构之外测试视图
可能有几种情况需要测试不属于默认窗口层次结构的视图。例如,测试可能使用WindowManager呈现的视图:
测试一个AdapterView
现在继续进行AdapterView测试。为了测试AdapterView,Espresso提供了一个单独的onData()入口,在对其本身或其子进行任何操作之前,首先对适配器项目进行测试。如果要测试一个AdapterView,需要使用onData()方法而不是onView()方法。
可以在中找到可用的ObjectMatcher,DataOptions,ViewAction和ViewAssertion的完整列表。
下面是一个简单的例子,找到一个匹配单词"Espresso"的String类型列表项并对它执行click()事件:
下面的例子将找到具有内容"item content:10"的列表项目,并且在其具有id R.id.item_id的子视图上执行点击事件:
测试一个RecyclerView
由于RecyclerView对象的行为与AdapterView对象的行为不同,所以不能使用onData()来测试RecyclerView对象。
如果要测试RecyclerView,需要添加espresso-contrib包依赖项。这个软件包包含一个RecyclerViewActions的集合,可以使用它来滚动到位置或对这些项目执行操作。
要使用Espresso与RecyclerView进行交互,可以使用espresso-contrib软件包(在app / build.gradle中添加"com.android.support.test.espresso:espresso-contrib:2.2.2"依赖项) RecyclerViewActions可用于滚动到位置或对项目执行操作。该集合包括以下RecylerViewActions:
·scrollTo() - 此RecyclerViewActions滚动到匹配的视图。
·scrollToHolder() - 此RecyclerViewActions滚动到匹配的视图持有者。
·scrollToPosition() - 此RecyclerViewActions滚动到一个特定的位置。
·actionOnHolderItem() - 此RecyclerViewActions在匹配的View Holder上执行View Action。
·actionOnItem() - 此RecyclerViewActions在匹配的View上执行View Action。
·actionOnItemAtPosition() - 此RecyclerViewActions在特定位置的视图上执行ViewAction。
我们来看一个测试RecyclerView的例子:
上面的例子将首先找到ID为R.id.rv_espresso的RecyclerView,然后滚动到第五个位置并在该项目上执行一个单击事件。
同样,我们也可以使用其他的RecyclerViewActions。
现在看看如何测试一个自定义RecyclerView,例如ExpandableRecyclerView。考虑一下,当需要测试可展开视图的子视图的情况。
首先,编写一个可以执行的自定义操作:
现在,在子视图上执行这个操作:
现在来看看如何编写和使用Custom Matcher和Custom Failure Handler。
Custom Matcher & FailureHandler
在编写测试用例时,可能需要实现Custom Matcher或者Custom Failure Handler,因为在某些情况下,缺省的处理器可能不足够。
1.Custom Matcher
有些情况下,默认的可用匹配器可能是不够的。在这种情况下,需要编写我们自己的匹配器。考虑一个情况,当需要检查EditText中的文本是否与正则表达式匹配时,由于没有默认的匹配器做这个工作,所以需要程序员自己实现。
我们来看看如何编写一个用于验证模式的Custom Matcher:
使用这个匹配器:
2.Custom Failure Handler
有些情况下,我们可能想要处理一些Espresso抛出的异常,并自定义一些实现,比如记录一些可能更有意义的额外数据。
在已经写了一个custom failure handler程序之后,我们需要这样设置它:
这就是如何为不同的组件编写基本的测试用例。作者希望这篇文章能够激励程序员为应用程序编写测试用例。起初,这可能是困难的,但一旦掌握了它,将是非常有用的。
你认为这份教程怎么样呢?如果你有更好的想法,欢迎在评论区留言!
安卓程序员都懂:如何用Espresso对UI界面测试?相关推荐
- 大神程序员都懂英文翻译,而你却因英语不行遭拒?
程序员中很多人都是在外企里面工作的.这样的话就会涉及到,跟外籍同事的沟通和协作.上下级之间的汇报工作.虽然我们的主要工作是开发软件.是技术类工作.跟计算机打交道比较多,但是沟通对技术来说,还是非常重要 ...
- 程序员都懂的30个段子,你知道几个?
1. 问:程序猿最讨厌康熙的哪个儿子?. A.皇长子允禔 C.皇八子允禩 B.皇三子允祉 D.皇十六子允禄 答案C皇八子胤禩.因为他是八阿哥(bug) 2. 程序猿要了3个孩子,分别取名叫Ctrl.A ...
- 大多数程序员都懂的java虚拟机:C1编译器从字节码到HIR
从字节码到HIR 正如之前看到的,C1的HIR是一个基于静态单赋值的图IR,由基本块构成控制流图,由静态单赋值指令构成基本块,如图8-1所示. 所有的指令都派生自Instruction类,其中,Blo ...
- 程序员的梗_程序员都背着大书包,里面到底装的什么?程序员们:钱、电脑.....
程序员的典型形象是什么?大概就是穿着格子衫.背着大书包的形象吧? 不明白为什么程序员都喜欢背着大书包,一位网友发出灵魂拷问:地铁上的程序员都背着大书包,里面到底装的什么? 程序员们翻了翻自己的大书包, ...
- android不能在主线程,安卓开发:主线程真的不能做UI操作吗?这一点很多程序员都没想到...
只要参与过安卓项目开发一两年的朋友们应该清楚,为了避免UI渲染出现异常安卓框架限制UI操作只能在主线程中进行,如果贸然在子线程做了UI操作结果会怎样?我们随便写下了如下测试代码. 不出意外的话,代码执 ...
- 程序员都该懂的 UML 规范!
作者 | 码匠笔记 责编 | 胡巍巍 在团队协作过程中最常见的就是开会.开会最常用的就是图,而图中最常见的就是流程图.时序图.类图,这三个图可以清楚的描述你想解释的内容. 学好类图不仅仅能帮助自己更清 ...
- 算法精解 c语言描述 豆瓣,斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂!...
原标题:斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂! "算法会扩展并提高大家的编程技巧,而学习基本的算法设计范式,可以和许多不同领域的不同问题密切相关,还能作为预测算法 ...
- 每个程序员都可以「懂」一点 Linux
点击上方"马蜂窝技术",关注订阅更多优质内容 提到 Linux,作为程序员来说一定都不陌生.但如果说到「懂」Linux,可能就没有那么多人有把握了.到底用 Linux 离懂 Lin ...
- resultset需要关闭吗_Java程序员都需要懂的「反射」
前言 只有光头才能变强.文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 今天来简单写一下Java的反射.本来没打算写反射这 ...
最新文章
- java中min用法,java11教程--类MinguoDate用法
- 求高精度幂(java)
- windows扩展C盘空间
- java 虚拟机 参数_Java虚拟机的参数
- 属性提取器:获取ListView即时更新其元素的最佳方法
- 安装(python 版)
- linux vim 单引号,单引号和双引号的区别、linux快捷键、zip压缩、lrzsz、vim常见问题...
- 安卓+4.0.4+java模拟器_Android 4.0.4模拟器安装完全教程(图文)
- linux动态库编译gcc,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(3)...
- Mac OS下将iso镜像写入U盘
- 由jar文件生成jad文件
- 基于树莓派的人脸识别(Linux系统 百度智能云平台)
- 两个队列实现一个栈-----队列面试题3
- 三菱伺服电机马达使用注意事项
- 计算机技术领域当前的主流技术及其社会需求调查报告
- HDU 2036 (平面几何 多边形面积)
- springboot基于java的校园二手书籍交易平台毕业设计源码131558
- linux命令之man及ubuntu下man
- 模型和算法,有什么区别
- ILM --interface logic model
热门文章
- [ES6] 细化ES6之 -- async函数
- 关于JavaScript中cookie的用法例子
- 关于多文档MFC从xp系统上移植到win7上出现错误的问题解决经验
- Array deduplication
- 7-46 最长对称子串 (25 分)
- 力扣232-用栈实现队列(C++,附思路)
- html表格td的内容修改,点击table中的td,修改td中的内容功能实现
- gearman mysql 扩展_Gearman的安装和使用
- day30,网络编程和各种协议
- 人人开源之代码生成器(renren-generator)