Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试

原文地址:http://android.xsoftlab.net/training/activity-testing/activity-functional-testing.html

功能性测试包括模拟用户操作之类的组件验证。例如开发者可以通过功能性测试来验证在用户执行了UI操作之后Activity是否启动了Activity。

如要为Activity创建功能性测试,测试类应当继承ActivityInstrumentationTestCase2。与ActivityUnitTestCase不同,ActivityInstrumentationTestCase2既可以与Android系统通信,又能使程序可以接收键盘输入事件与屏幕点击事件。

验证功能行为

一般功能性测试可能会有以下测试目的:

  • 验证在某个UI控制器被按下后,目标Activity是否被启动。
  • 验证目标Activity是否将在启动之前的用户输入数据正确显示。

开发者所实现的代码可能如下:

@MediumTest
public void testSendMessageToReceiverActivity() {final Button sendToReceiverButton = (Button) mSenderActivity.findViewById(R.id.send_message_button);final EditText senderMessageEditText = (EditText) mSenderActivity.findViewById(R.id.message_input_edit_text);// Set up an ActivityMonitor...// Send string input value...// Validate that ReceiverActivity is started...// Validate that ReceiverActivity has the correct data...// Remove the ActivityMonitor...
}

测试框架会等待ReceiverActivity启动,否则的话将会在超时后返回null。如果ReceiverActivity启动,那么ActivityMonitor则会收到一个命中。开发者可以通过断言方法来验证ReceiverActivity是否被启动,命中数是否会如所期望的那样有所增长。

设置ActivityMonitor

如果需要监视Activity,可以注册ActivityMonitor。当目标Activity启动时,系统会通知ActivityMonitor一个事件。如果目标Activity启动,那么ActivityMonitor的计数器则会更新。

一般使用ActivityMonitor应当执行以下步骤:

  • 1.通过getInstrumentation()方法获得用于测试的Instrumentation实例。
  • 2.通过Instrumentation的addMonitor()重载方法将Instrumentation.ActivityMonitor的实例添加到当前的instrumentation中,具体的匹配规则可由IntentFilter或者类名指定。
  • 3.等待被监视的Activity启动。
  • 4.验证监视器的数字增长。
  • 5.移除监视器。

例如:

// Set up an ActivityMonitor
ActivityMonitor receiverActivityMonitor =getInstrumentation().addMonitor(ReceiverActivity.class.getName(),null, false);
// Validate that ReceiverActivity is started
TouchUtils.clickView(this, sendToReceiverButton);
ReceiverActivity receiverActivity = (ReceiverActivity) receiverActivityMonitor.waitForActivityWithTimeout(TIMEOUT_IN_MS);
assertNotNull("ReceiverActivity is null", receiverActivity);
assertEquals("Monitor for ReceiverActivity has not been called",1, receiverActivityMonitor.getHits());
assertEquals("Activity is of wrong type",ReceiverActivity.class, receiverActivity.getClass());
// Remove the ActivityMonitor
getInstrumentation().removeMonitor(receiverActivityMonitor);

使用Instrumentation发送键盘事件

如果Activity含有EditText,可能需要测试用户是否可以对其输入数据。

一般来说,要发送字符串到EditText,应当:

  • 1.在runOnMainSync()方法中运行requestFocus()同步方法,这样会使UI线程一直等待接收焦点。
  • 2.调用waitForIdleSync()方法使主线程变为空闲状态。
  • 3.通过sendStringSync()方法发送一条字符串给EditText。

例如:

// Send string input value
getInstrumentation().runOnMainSync(new Runnable() {@Overridepublic void run() {senderMessageEditText.requestFocus();}
});
getInstrumentation().waitForIdleSync();
getInstrumentation().sendStringSync("Hello Android!");
getInstrumentation().waitForIdleSync();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力 代码CrissCrossAttention注意力ECAAttention通道注意力EMAU期望最大化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

美团点评智能支付核心交易系统的可用性实践

背景 每个系统都有它最核心的指标。比如在收单领域:进件系统第一重要的是保证入件准确,第二重要的是保证上单效率。清结算系统第一重要的是保证准确打款,第二重要的是保证及时打款。我们负责的系统是美团点评智能支付的核心链路,承…

python编程之如何判断某个元素在不在列表里面

python编程之如何判断某个元素在不在列表里面 keyword_list ["对象","python"]if "对象" in keyword_list:print("对象在关键词列表中")else:print("对象不在关键词列表中")结果: 对象在关键词列表中

Transformer太大了,我要把它微调成RNN

文 | 炼丹学徒编 | 小轶从前车马很慢,显卡跑的也慢,一生只够爱一个RNN。后来时代进步了,数据量和计算力阔绰了,堆叠起来的Transformer能够在更深更宽的模型结构里吃下去更多的数据。从19年的预训练浪潮开始,暴力美学兴…

论文浅尝 - JWS2020 | FEEL: 实体抽取和链接的集成框架

论文笔记整理,谭亦鸣,东南大学博士生。来源:JWS 2020链接:https://www.sciencedirect.com/science/article/pii/S157082682030010X?via%3Dihub介绍实体抽取和链接(Entity extraction and linking, EEL)是语…

一步步手动实现热修复(一)-dex文件的生成与加载

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 热修复技术自从QQ空间团队搞出来之后便渐渐趋于成熟。 我们这个系列主要介绍如何一步步手动实现基本的热修复功能,无需使用第三方框架。 在开始学习之前,需要对基本的热…

标签生成-基于标签的的推荐系统

0 推荐系统之标签体系 1 干货,如何建立数据标签体系 https://cloud.tencent.com/developer/article/1778469 2 《推荐系统》基于标签的用户推荐系统: 3 推荐系统 - 基于标签的推荐算法

美团酒旅实时数据规则引擎应用实践

背景 美团点评酒旅运营需求在离线场景下,已经得到了较为系统化的支持,通过对离线数据收集、挖掘,可对目标用户进行T1触达,通过向目标用户发送Push等多种方式,在一定程度上提高转化率。但T1本身的延迟性会导致用户在产生…

开直播辣!生成对抗网络全脉络梳理!

深度学习中最有趣的方法是什么?GAN!最近最火的AI技术是什么?GAN!!你现在脑子里在想什么?搞定GAN!!!【已经大彻大悟要直接报名公开课、挑战万元奖品池的请划到最后】GAN真…

论文浅尝 - ICLR2020 | 具有通用视觉表示的神经机器翻译

论文笔记整理:柏超宇,东南大学在读硕士。来源:ICLR2020 https://openreview.net/forum?idByl8hhNYPS代码链接:https://github.com/cooelf/UVR-NMT简介和动机近年来,不少工作已经证明了视觉信息在机器翻译(…

实体链指比赛方案分享

实体链指比赛方案分享:https://aistudio.baidu.com/aistudio/projectdetail/1331020?channelType0&channel0 实体链指比赛方案分享 比赛任务 实体链指,又称实体链接(Entity Linking,EL),即对于给定的…

一步步手动实现热修复(二)-类的加载机制简要介绍

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 本节课程主要分为3块: 1.一步步手动实现热修复(一)-dex文件的生成与加载2.一步步手动实现热修复(二)-类的加载机制简要介绍3.一步步手动实现热修复(三)-Class文件的替换 本节示例所…

知识图谱能否拯救NLP的未来?

文 | Luke知乎知识图谱是NLP的未来吗?2021年了,不少当年如日中天技术到今天早已无人问津,而知识图谱这个AI界的大IP最火的时候应该是18,19年,彼时上到头部大厂下到明星创业公司都在PR自己图谱NLP布局能够赋予AI认知能力…

论文浅尝 | Data Intelligence 已出版的知识图谱主题论文

本文转载自公众号:DI数据智能。 知识图谱被称为人工智能的基石,它的前身是语义网,由谷歌在2012年率先提出,用于改善自身的搜索业务。Data Intelligence执行…

一步步手动实现热修复(三)-Class文件的替换

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 本节课程主要分为3块: 1.一步步手动实现热修复(一)-dex文件的生成与加载2.一步步手动实现热修复(二)-类的加载机制简要介绍3.一步步手动实现热修复(三)-Class文件的替换 本节示例所…

Vision Transformer 论文解读

原文链接:https://blog.csdn.net/qq_16236875/article/details/108964948 扩展阅读:吸取CNN优点!LeViT:用于快速推理的视觉Transformer https://zhuanlan.zhihu.com/p/363647380 Abstract: Transformer 架构早已在自然语言处理…

长这么大,才知道数据集不用下载可以直接在线使用

每天清晨打开电脑,搜索所需的数据集,点击“Download”,愉快地眯上眼睛,期待n个小时后醒来乖巧下载好的数据,开始放进模型像小仓鼠进滚轮一样快乐奔跑。梦醒时分,一个“Error”蹦进眼睛里,美好码…

会议交流 - CCKS2020 | 2020年全国知识图谱与语义计算大会

OpenKG开放知识图谱(简称 OpenKG)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。

LeetCode 739. 每日温度(单调栈)

1. 题目 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures [73, 74, 75, 71, 69, 72, 76, …

令人振奋的好消息!2016年12月8日Google Developers中文网站发布!

令人振奋的好消息! 2016年12月8日Google Developers中文网站发布! 以往我们需要访问Android的开发网站、Google的开发网站都需要翻墙,苦不堪言。现在Google发布了中文网站,怎能不让人开心?! Android中文…