Android官方开发文档Training系列课程中文版:Activity测试之UI组件测试

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

一般来说,正因为Activity含有UI组件,所以使得用户可以与程序交互。这节课将会介绍如何测试Activity中的Button组件。在课程学习之后便可以使用相同的方法对其它UI组件进行测试。

Note:这节课中所涉及的UI测试被称为白盒测试,因为开发者本身持有被测试的源代码。Android设备框架适用于UI组件的白盒测试。另一种测试类型被称为黑盒测试,因为不能够得到程序的源代码,故此得名。这种测试适用于与其它APP或系统交互的测试情况。黑盒测试在这里并不会涵盖。有关更多如何执行黑盒测试的相关内容,请参见UI测试指南。

创建UI测试用例

虽然Activity运行于UI线程,但是测试程序本身是运行在子线程中的。这意味着,虽然TestAPP可以引用UI线程的对象,但是如果要更改这些对象的属性或者发送事件给UI线程,那么将会得到一个WrongThreadException错误。

为了可以安全的发送Intent到Activity或者在UI线程中运行测试方法,开发者可以使测试类继承于ActivityInstrumentationTestCase2类。

设置测试先决条件

当为UI测试设置先决条件时,则需要在setUp()方法中指定TouchMode。设置TouchMode为true可以使后面的测试方法在自动化点击UI组件时防止真正点击(例如,测试Button只是调用了它的onclick方法)。另外要确保在调用getActivity()方法之前调用了setActivityInitialTouchMode()方法。

例如:

public class ClickFunActivityTestextends ActivityInstrumentationTestCase2 {...@Overrideprotected void setUp() throws Exception {super.setUp();setActivityInitialTouchMode(true);mClickFunActivity = getActivity();mClickMeButton = (Button) mClickFunActivity.findViewById(R.id.launch_next_activity_button);mInfoTextView = (TextView) mClickFunActivity.findViewById(R.id.info_text_view);}
}

添加测试方法

一般需要测试的点会包含以下部分:

  • 当Activity启动时,验证Button的布局是否显示正确。
  • 验证TextView在初始化时是否是隐藏的。
  • 验证Button按下后,TextView上的文本是否变为了期望的值。

下面将会演示如何测试以上部分:

验证Button的布局参数

开发者可能需要以下代码来验证Button的布局是否正确:

@MediumTest
public void testClickMeButton_layout() {final View decorView = mClickFunActivity.getWindow().getDecorView();ViewAsserts.assertOnScreen(decorView, mClickMeButton);final ViewGroup.LayoutParams layoutParams =mClickMeButton.getLayoutParams();assertNotNull(layoutParams);assertEquals(layoutParams.width, WindowManager.LayoutParams.MATCH_PARENT);assertEquals(layoutParams.height, WindowManager.LayoutParams.WRAP_CONTENT);
}

在调用assertOnScreen()方法时,应当将rootView以及需要验证的View传递进去。如果需要验证的View没有在rootView中出现,那么判断方法会抛出一个AssertionFailedError异常。

开发者还可以通过Button的布局参数来验证Button的布局是否正确,然后通过判断方法来验证Button的高宽是否是期望中的值。

@MediumTest注解说明了这个测试方法应当如何分类。如何分类取决于测试方法的执行时间。

验证TextView的布局参数

开发者也可能需要通过以下代码来验证TextView在初始化时是否是隐藏的:

@MediumTest
public void testInfoTextView_layout() {final View decorView = mClickFunActivity.getWindow().getDecorView();ViewAsserts.assertOnScreen(decorView, mInfoTextView);assertTrue(View.GONE == mInfoTextView.getVisibility());
}

开发者可以通过getDecorView()方法获得Activity的DecorView引用。DecorView在布局层级中属于最高等级的ViewGroup.

验证Button的行为

开发者可以根据以下测试方法来验证在Button按下后TextView是否变为可见状态。

@MediumTest
public void testClickMeButton_clickButtonAndExpectInfoText() {String expectedInfoText = mClickFunActivity.getString(R.string.info_text);TouchUtils.clickView(this, mClickMeButton);assertTrue(View.VISIBLE == mInfoTextView.getVisibility());assertEquals(expectedInfoText, mInfoTextView.getText());
}

为了可以自动点击Button,需要调用clickView()方法。该方法需要传入测试用例的引用以及对应Button的引用。

Note: 辅助类TouchUtils提供了一些用于模拟交互的简单方法,开发者可以使用这些方法来模拟点击,拖拽等事件。

Note: TouchUtils中的方法用于从测试线程向UI线程中发送事件。开发者最好不要在UI线程中直接调用TouchUtils的相关方法,否则会引起WrongThreadException异常.

测试注解

以下注解可以用来标明测试方法的大小:

  • @SmallTest

  • @MediumTest

  • @LargeTest

一般来说,一个只有几毫秒的剪短测试一般应该标为@SmallTest。稍长一点的,大概100毫秒左右的,通常应该标为@MediumTest或@LargeTest,测试的执行时间通常取决于是否需要访问本地资源或者网络资源。

开发者应当通过注解来标记测试方法,以便更好的组织、运行测试。

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

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

相关文章

插件化、热补丁中绕不开的Proguard的坑

文章主体部分已经发表于《程序员》杂志2018年2月期,内容略有改动。 ProGuard简介 ProGuard是2002年由比利时程序员Eric Lafortune发布的一款优秀的开源代码优化、混淆工具,适用于Java和Android应用,目标是让程序更小,运行更快&…

互联网高端社畜行话大全(表情包)

作者 | 洋气的圆圆君前几天,字节跳动CEO张一鸣发表的演讲刷屏朋友圈,其中不忘开讽互联网黑话。燃鹅,作为一只卑微的互联网社畜,哪天被父母问起来我们行业常说的“抓手”、“赋能”都是啥,答不好的话那是要被challenge自…

论文浅尝 | DeCLUTR: 无监督文本表示的深度对比学习

Giorgi, J. M., O. Nitski, G. D. Bader and B. Wang (2020). "DeCLUTR: Deep Contrastive Learning for Unsupervised Textual Representations." arXiv preprint arXiv:2006.03659.原文链接:https://arxiv.org/pdf/2006.03659GitHub项目地址&#xff1a…

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

原文地址:http://android.xsoftlab.net/training/activity-testing/activity-unit-testing.html Activity单元测试除了可以快速的验证Activity的状态之外,还可以验证Activity与底层组件之间的交互。单元测试通常用于测试较小的代码单元(它们通常不依赖系…

MoCoV3:何恺明团队新作!解决Transformer自监督训练不稳定问题!

文 | happy源 | 极市平台论文链接: https://arxiv.org/abs/2104.02057本文是FAIR的恺明团队针对自监督学习Transformer的一篇实证研究。针对Transformer在自监督学习框架中存在的训练不稳定问题,提出了一种简单而有效的技巧:Random Patch Projection&…

LeetCode 496. 下一个更大元素 I(哈希)

1. 题目 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。 nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应…

论文浅尝 - AAAI2020 | 多模态基准指导的多模态自动文摘

论文笔记整理:刘雅,天津大学硕士。链接:https://aaai.org/ojs/index.php/AAAI/article/view/6525动机近年来,随着计算机视觉以及自然语言处理技术的发展,多模态自动文摘技术逐渐成为学术界和工业界研究的热点。当前的多…

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

原文地址:http://android.xsoftlab.net/training/activity-testing/activity-functional-testing.html 功能性测试包括模拟用户操作之类的组件验证。例如开发者可以通过功能性测试来验证在用户执行了UI操作之后Activity是否启动了Activity。 如要为Activity创建功…

改进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文件的替换 本节示例所…