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

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

为了验证在布局与功能上没有差池,很重要的一点就是需要为每个Activity创建对应的测试类。对每个测试类还需要创建单独的测试用例,这其中包含测试环境,测试条件以及对Activity测试的测试方法。实现这些便可以进行测试并获知结果。如果其中一项测试失败了,这便意味着在代码中可能存在潜在的问题。

创建测试用例

Activity测试都以结构化的方式实现。要确保将所有的测试放在一个单独的包中,与被测试代码区别开来。

依照惯例,测试包的包名应当由应用的包名+后缀”.tests”组成。在完成测试包的创建之后,添加一个Java类以用于测试。依照惯例,该类的名称应当由要测试的类的类名+后缀”Test”组成。

在Eclipse中创建测试用例的步骤如下:

  • a.在工程中新建一个包。
  • b.设置包名为< your_app_package_name>.tests(例如,com.example.android.testingfun.tests),并点击Finish。
  • c.在该包名下创建一个类。
  • d.设置类名为< your_app_activity_name>Test(例如,MyFirstTestActivityTest),并点击Finish。

设置测试先决条件

测试先决条件由一系列用于测试的对象组成。设置这些先决条件需要重写setUp()方法以及tearDown()方法。TestRunner会在测试之前调用setUp()方法,在测试结束之后调用tearDown()方法。开发者可以通过这两个方法来确保测试被正常初始化以及可以确保在测试结束之后可以及时清理。

在Eclipse中设置测试先决条件:
1.将上面创建好的测试类继承于ActivityTestCase的任一子类。例如:

public class MyFirstTestActivityTestextends ActivityInstrumentationTestCase2<MyFirstTestActivity> {

2.接下来,在这个类的内部添加构造方法以及setUp()方法,并添加要测试的Activity的变量声明。例如:

public class MyFirstTestActivityTestextends ActivityInstrumentationTestCase2<MyFirstTestActivity> {private MyFirstTestActivity mFirstTestActivity;private TextView mFirstTestText;public MyFirstTestActivityTest() {super(MyFirstTestActivity.class);}@Overrideprotected void setUp() throws Exception {super.setUp();mFirstTestActivity = getActivity();mFirstTestText =(TextView) mFirstTestActivity.findViewById(R.id.my_first_test_text_view);}
}

构造方法会在类初始化时由TestRunner调用,而setUp()方法则会在开始测试之前调用。

通常情况下,在setUp()方法内,应当实现以下内容:
- 调用父类的setUp()方法。
- 通过以下步骤初始化先决条件:
- 定义实例变量用于存储先决条件的状态。
- 创建并存储接下来要测试的Activity的引用。
- 持有Activity中需要进行测试的UI组件的引用。

可以通过getActivity()获取要测试的Activity的引用。

添加测试条件

在进行测试之前,还有一个步骤就是需要验证前一步是否设置正确,以及需要测试的对象是否已被正确的实例化、初始化。这样的话,便不需要确认测试本身是否有误,因为测试的先决条件已经发生了错误。依照惯例,用于验证先决条件的方法被称为testPreconditions().

例如:

public void testPreconditions() {assertNotNull(“mFirstTestActivity is null”, mFirstTestActivity);assertNotNull(“mFirstTestText is null”, mFirstTestText);
}

其中的判断方法来自于JUnit的Assert类。通常情况下可以使用这些判断方法来验证需要测试的指定条件是否为true。
- 如果条件为false,那么判断方法会抛出一个AssertionFailedError异常。该异常由TestRunner抛出。如果判断失败,那么可以通过判断方法的第一个参数得知是哪个条件失败。
- 如果条件为true,那么测试会顺利执行。

在这两种情况中,TestRunner会继续执行其它的判断方法。

添加测试方法

接下来,添加测试方法来验证Activity的布局与功能。

例如,如果Activity包含了一个TextView,你可以像下面这样添加一个测试方法来验证该TextView的文本是否正确:

public void testMyFirstTestTextView_labelText() {final String expected =mFirstTestActivity.getString(R.string.my_first_test);final String actual = mFirstTestText.getText().toString();assertEquals(expected, actual);
}

testMyFirstTestTextView_labelText()方法用于检测TextView的默认文本与定义在string.xml中的文本是否一致。

Note: 当命名测试方法时,可以使用下划线来分开要测试的内容,这种编写风格可以更容易明确测试的内容。

要执行比较,将期望的值与实际的值传给assertEquals()方法。如果两个值不相等,那么将会抛出一个AssertionFailedError异常。

如果添加testPreconditions()方法,那么请将测试代码放在testPreconditions()之后。

构建运行测试

在Eclipse中进行代码测试非常容易。

请执行以下步骤:
1.将Android设备连接到计算机。打开Setting菜单,选择Developer选项,并确保USB调试模式已开启。
2.在测试的类中选择RunAs > Android Junit Test.
3.在Android设备选择对话框中,选择刚刚连接好的设备,点击OK。
4.在JUnit界面中,验证测试是否通过。

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

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

相关文章

LeetCode 77. 组合(回溯)

1. 题目 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例:输入: n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode-cn.com/problems/combin…

论文浅尝 - AAAI2020 | 从异质外部知识库中进行基于图的推理实现常识知识问答...

会议&#xff1a;AAAI2020论文链接&#xff1a;https://arxiv.org/pdf/1909.05311.pdf摘要常识问答旨在回答需要背景知识的问题&#xff0c;而背景知识并未在问题中明确表达。关键的挑战是如何从外部知识中获取证据并根据证据做出预测。最近的研究要么从昂贵的人类注释中生成证…

机器学习算法中的准确率、精确率、召回率和F值

机器学习算法中的准确率、精确率、召回率和F值&#xff1a;https://www.jianshu.com/p/d400a821ef3d

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

原文地址&#xff1a;http://android.xsoftlab.net/training/activity-testing/activity-ui-testing.html 一般来说&#xff0c;正因为Activity含有UI组件&#xff0c;所以使得用户可以与程序交互。这节课将会介绍如何测试Activity中的Button组件。在课程学习之后便可以使用相…

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

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

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

作者 | 洋气的圆圆君前几天&#xff0c;字节跳动CEO张一鸣发表的演讲刷屏朋友圈&#xff0c;其中不忘开讽互联网黑话。燃鹅&#xff0c;作为一只卑微的互联网社畜&#xff0c;哪天被父母问起来我们行业常说的“抓手”、“赋能”都是啥&#xff0c;答不好的话那是要被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.原文链接&#xff1a;https://arxiv.org/pdf/2006.03659GitHub项目地址&#xff1a…

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

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

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

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

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

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

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

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

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

原文地址&#xff1a;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注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

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

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

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

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

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

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

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

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

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

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

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

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

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

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