根据维基百科的解释,单元测试又称为模块测试。是针对程序单元来进行正确性校验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序,函数,过程等,对于面向对象编程,最小单元就是方法。
  通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后可能要进行多次单元测试,以证实程序满足需求。
  那为什么要做单元测试呢?
  我们首先来看看Android程序员常见的自测方式:
  实现某个功能后,在手机上执行整个应用,然后在手机上操作应用,在界面上多次点击后,进入使用该功能的场景,然后测试该功能,通常只会测试功能执行的主路径。也就是说如果功能有多分支结构(if-else),那么自测时只会测试一条主路径,其它分支结构都会交给测试人员进行人工测试。
  那这样做有什么问题呢?
  如果每次实现功能时都能确保没问题,那上述流程看起来就没啥大问题了。但事实上,我们每次实现某个功能时,谁都不敢保证写完功能实现代码一定能保证它一点问题没有,谁能这么说,我也只能呵呵了。实际上,我们每次实现的功能或多或少都会存在问题,我们需要反复修改代码,来测试我们的逻辑是否正常,按照上述的流程,我们修改完代码后需要编译生成apk,连接手机,将应用安装至手机,这几步通常就需要2分钟,然后再在手机上操作进入使用功能场景的地方,测试功能场景,并观察结果,这一般需要1分钟。所以我们每次写完代码后,需要3分钟进行验证,如果修改5次,每次定位问题并修改逻辑的时间为2分钟,那么确保该功能主逻辑没问题需要5*(2+3)=25分钟,其中60%的时间(15分钟)用于验证问题,40%的时间(10分钟)用于真正的解决问题。
  从这个角度看,这种自测方式非常低效,还需要程序员不断在电脑上的编程IDE和手机的应用之间切换,并且还要在手机上反复执行重复操作,对于程序员来说,其实是一件很痛苦的事情,也很容易误操作。有时候等待手机连接到电脑还要等半天,尤其是装驱动有时候要装半天,甚至adb冲突导致连接也要等非长久,有时候公司要求归还开发用的手机,换一部新的开发机,使用新的开发手机会非常不熟悉,在手机上打开调试模式都要半天,这些都是非常耽误工作效率的事情,让程序员非常痛苦。
  另外,这种测试通常只会测试功能执行的主流程,还有很多分支流程不会执行,交给测试人员执行时,因为测试人员通常都是做黑盒测试,所以对内部逻辑不会太了解,很容易遗漏某些分支的测试,并且这些分支的准备条件对于测试人员来说也很不好准备,所以即使知道,也会忽略某些分支的测试。而这些分支如果有问题,到了用户侧就会暴露出来了。所以这种测试没法保证功能的非主分支也能执行正常。
  另外,这种测试方式即使让功能的初次实现没问题了,后续迭代过程中会不断修改它的逻辑,或者它依赖的逻辑,这时候问题就出来了,因为我们修改它依赖的逻辑后,并不会再让测试同学测试这个功能。我们可能都遇到过这种场景,我们将某个Bug修改好了之后,过一段时间后,我们修改另外一个Bug,这个Bug修改好了,结果前一阵子修改的Bug又出现了。这是为什么呢?因为我们修改Bug时通常都会专注这一个Bug,修改逻辑时,只会专注于将引起这个问题的逻辑调整正确,但是将引起这个问题的逻辑调整后之后,有可能导致其它问题。比如,如果函数A调用函数C,希望它返回"Hello",函数B调用函数C,希望它返回"Hello2",某一天函数A希望函数C返回"HelloC"了,于是修改了函数C的逻辑,结果函数A调用函数C确实返回了"HelloC",然而函数B调用函数C也返回"HelloC"了,那么这就有问题了。而我们可能并不会注意到这个问题,就直接发了版本,到了用户侧,就有大量用户抱怨了。如果我们每次发版本时,将所有曾出现过的Bug以及所有的功能都测试一遍,那么需要非常长的时间,会严重耽误项目进度。
  我们再回到当初的问题,为什么做需要做单元测试,从上述几个角度已经看到通常的自测方式存在的问题,那我们看使用单元测试是如何解决这些问题的:
  低效的问题
  使用JUnit的单元测试时,可以脱离手机进行代码逻辑正确性的验证,也不需要在手机上操作,执行测试用例后直接输出测试结果是否正常,如果正常就是绿颜色的执行结果,如果失败就是红颜色的执行结果,可以将验证操作的时间缩短到30s内。当然我们需要花一定的时间在编写测试用例上,不过这只是一个一次性的工作。

软件测试之Android单元测试相关推荐

  1. 软件测试之【单元测试、系统测试、集成测试】

    目录 一.单元测试的概念 二.单元测试的目的 三.单元的常见错误 四.如何进行单元测试 五.单元测试策略 六.系统测试的概念 七.系统测试的环境 八.系统测试的类型 九.系统测试的过程 十.集成测试概 ...

  2. Android 单元测试,从小白到入门开始

    目录 1 引言 1.1  背景 1.2 术语和缩略语 2 闲谈单测 2.1 说说我理解的单测 2.1.1 对测试金字塔的理解 2.1.2 为什么要做单测? 2.1.3 需要写 UI 测试吗? 2.1. ...

  3. 全程软件测试之测试需求分析与计划

    全程软件测试之测试需求分析与计划 在项目启动之后,就要着手软件项目的计划,包括软件测试计划.软件测试计划是整个开发计划的组成部分,同时,它又依赖于软件组织过程.项目的总体计划.质量文化和方针.在测试计 ...

  4. 《Google软件测试之道》- Google软件测试介绍

    <Google软件测试之道>- Google软件测试介绍 2015-05-21 目录 1 质量与测试   2 角色   3 组织结构   4 爬.走.跑   5 测试类型   相关链接 与 ...

  5. Android单元测试框架Robolectric3.0介绍(二)

    文章中的所有代码在此:https://github.com/geniusmart/LoveUT ,由于 Robolectric 3.0 和 3.1 版本(包括后续3.x版本)差异不小,该工程中包含这两 ...

  6. 《微软的软件测试之道》读书笔记 之 结构测试技术

    <微软的软件测试之道>读书笔记 之 结构测试技术 2014-07-18 我们需要结构测试吗? 微软的一项试验说明了结构测试的在代码覆盖中起到的效果: 超过3000名测试员参与了这项实验,每 ...

  7. 软件测试密码修改教程,软件测试之用户注册和密码修改测试用例设计

    软件测试之用户注册和密码修改测试用例设计 发表于:2009-03-05来源:作者:点击数: 软件测试技术导航 软件测试技术 : 软件测试工程师 测试用例 功能测试 测试管理 缺陷管理 手机测试 自动测 ...

  8. 《Google 软件测试之道》摘录

    最近刚刚看完<Google 软件测试之道>,受益颇多,遂记录下: 只有在软件产品变得重要的时候质量才显得重要 第一章:谷歌软件测试介绍 角色介绍 SWE(Software Engineer ...

  9. 《Google软件测试之道》读书笔记

    Google软件测试之道 像google一样进行软件测试 软件测试介绍 少则清晰,测试人员的稀缺导致测试资源很昂贵.(不要招聘太多的测试人员) 质量不等于测试 开发对质量负责(预防行为,不是检测) 卫 ...

最新文章

  1. 直播回顾|结构光编码与三维重建技术
  2. memcache的分布式缓存问题
  3. 基于AD5272多组变阻器电路设计
  4. python itchat 无法登录_利用python实现在微信群刷屏的方法
  5. [转]不定义JQuery插件,不要说会JQuery
  6. 深入分析 java 8 编程语言规范:Threads and Locks
  7. 5、【华为HCIE-Storage】--RAID类型
  8. nginx 反向代理跨域访问配置_nginx反向代理配置去除前缀
  9. 被忽视的fuzzywuzzy库
  10. 事务消息应用场景、实现原理与项目实战
  11. linux硬盘保护卡,保护卡下安装Linux
  12. 心脏遥测监控系统服务器,基于ARM7的心电采集与远程传输系统设计
  13. Detecting Near-Duplicates for Web Crawling - simhash与重复信息识别
  14. springmvc和encache集成
  15. NO.1 根据数组元素之和,获取对应索引
  16. 正确区分LJMP、AJMP、SJMP、JMP跳转指令
  17. Java成员变量初始化顺序
  18. 电商网站产品结构数据库设计
  19. Enhancing Underwater Images and Videos by Fusion
  20. JAVA 获取mac地址

热门文章

  1. WSL2安装及其python环境配置
  2. 如何优雅的使用FlaskWeb表单,快速掌握Flask-WTF
  3. 飞桨深度学习零基础入门(一)——使用飞桨(Paddle)单层神经网络预测波士顿房价
  4. IDEA使用maven进行打包详细记录
  5. 流程图(Activity)绘制
  6. JAVA GC是什么?为什么要有GC?
  7. 计算机指令集_计算机科学组织| 指令集及其类型
  8. AD域建设管理(四)| AD域实践(win server2019 RemoteApp前端修改与美化
  9. python中open与with open的区别
  10. mysql 导入表_如何向mysql导入数据