软件测试之Android单元测试

news2024/12/24 0:23:39

根据维基百科的解释,单元测试又称为模块测试。是针对程序单元来进行正确性校验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序,函数,过程等,对于面向对象编程,最小单元就是方法。

通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后可能要进行多次单元测试,以证实程序满足需求。

那为什么要做单元测试呢?

我们首先来看看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内。当然我们需要花一定的时间在编写测试用例上,不过这只是一个一次性的工作。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

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

相关文章

STL——string类

一、标准库中的string类 1.string类文档介绍 (1)字符串是表示字符序列的类。 (2)标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特…

IOS逆向--恢复Dyld的内存加载方式

之前我们一直在使用由dyld及其NSCreateObjectFileImageFromMemory/NSLinkModule API方法所提供的Mach-O捆绑包的内存加载方式。虽然这些方法我们今天仍然还在使用,但是这个工具较以往有一个很大的区别…现在很多模块都被持久化到了硬盘上。 roguesys 在 2022 年 2 …

还在用 OpenFeign?来试试 SpringBoot3 中的这个新玩意!

好久没发技术文章了,最近回到工作地,晚上有空又可以码码技术了,今天我们就来聊一个 Spring Boot3 中的新鲜玩意,声明式 HTTP 调用。 1. 由来 Spring Boot3 去年底就已经正式发布,我也尝了一把鲜,最近有空…

(02)Cartographer源码无死角解析-(53) 2D后端优化→位姿图优化理论(SPA)讲解、核型函数调用流程

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

Docker镜像部署至Rancher全局配置 以xxl-job-admin为例

流程以xxl-job-admin为例 1.基础环境 win/mac/linuxRancherDocker 2.下载源码 从Github上下载xxl-job xxl-jobGithub xxl-job官方地址 3.修改源码 打开 xxl-job 下的 xxl-job-admin 修改 application-properties 文件 修改数据库 修改为这种格式: 大括号包…

MPLS实验

目录实验要求mpls简介mpls工作过程实验的配置环回的配置R1和R5之间公网的ospf配置配置mpls-ldp配置R1和R5间的mplsvpn私网的rip及ospf的宣告配置公网mp-bgp的建立R2和R4上面的双向重发布R7和R8之间创建R7和R8间的mplsvpn配置静态路由及环回重发布实验要求 如图 要求&#xff1…

【C++修炼之路】15.C++继承

每一个不曾起舞的日子都是对生命的辜负 继承C继承一. 继承的概念及定义1.1 继承的引出1.2 继承的概念1.3 继承的定义二.基类和派生类对象赋值转换三.继承中的作用域3.1 作用域的概念3.2 举例说明同名冲突四.派生类的默认成员函数4.1 派生类的构造函数4.2 派生类的拷贝构造函数4…

【python学习笔记】:数据科学库操作(二)

接上一篇: 4、PIL Python Imaging Library(PIL) 已经成为 Python 事实上的图像处理标准库了,这是由于,PIL 功能非常强大,但API却非常简单易用。但是由于PIL仅支持到 Python 2.7,再加上年久失修,于是一群志…

如果写不好 SQL,有没有好用的报表软件?

业务和技术在做报表这件事情上,究竟有多大差别? 一家企业、一个组织,只要一直在经营和运作,因为税务和其他原因就需要通过数据报表来反映当期的经营管理状况。而“做报表”这个事情,在企业内部不管是业务人员还是技术人…

HTTP之Referrer和Referrer-policy

目录 HTTP之Referrer和Referrer-policy Referer Referrer-policy 如何设置referrer 盗链 防盗链的工作原理 绕过图片防盗链 利用https网站盗链http资源网站,refer不会发送 设置meta 设置referrerpolicy"no-referrer" 利用iframe伪造请求refe…

C语言指针变量的运算

指针变量保存的是地址&#xff0c;而地址本质上是一个整数&#xff0c;所以指针变量可以进行部分运算&#xff0c;例如加法、减法、比较等&#xff0c;请看下面的代码&#xff1a;#include<stdio.h>intmain(){ int a 10,*pa &a,*paa &a; double b 99.9,*pb &a…

JTAG和SWD调试器

文章目录一、调试器二、JTAG三、SWD三、各自优缺点一、调试器 当我们开发单片机程序时&#xff0c;通常是在Windows或Linux上进行代码编写和编译&#xff0c;但是单片机并不直接集成在电脑上&#xff0c;怎么验证我们的单片机程序是否正确并烧录到单片机中&#xff0c;此时就需…

某游戏平台检测加速辅助案例分析

加速类辅助会对游戏平衡造成极大的破坏&#xff0c;这类辅助会通过HOOK api的方式来达到修改游戏对时间判断的目的&#xff0c;一般情况下&#xff0c;在R3层&#xff0c;这类辅助会在 QueryPerformanceCounter TimeGetTime GettickCount这三个API上HOOK&#xff0c;修改他们的…

Java-黑马Java学习作业-day15面向对象进阶(抽象类接口内部类)

学习视频链接&#xff1a;https://www.bilibili.com/video/BV17F411T7Ao 文章目录第一题&#xff1a;&#xff08;抽象类求面积和周长&#xff09;第二题&#xff1a;&#xff08;接口实现新旧手机功能&#xff09;第三题&#xff1a;&#xff08;使用子类和匿名内部类调用接口…

大厂高薪测试在线讲解Jmeter全套性能测试

Jmeter进行性能测试基本包含如下基本过程&#xff1a;1&#xff09;新增线程组创建测试线程组&#xff0c;并设置线程数量及线程初始化启动方式。2&#xff09;新增 JMeter 元组创建各种默认元组及测试元组&#xff0c;填入目标测试静态资源请求和动态资源请求参数及数据。3&am…

Task9:Excel数据透视表

文章目录一 Excel数据透视表1 数据透视表2 切片器3 数据透视的注意事项4 透视表常用法二 Excel数据透视图一 Excel数据透视表 1 数据透视表 什么是透视表&#xff1a;把明细表分类汇总的过程&#xff0c;可以按照不同的组合方式进行数据计算使用场景&#xff1a; 1.大量数据&…

QT入门Buttons之QCheckBox

目录 一、界面布局介绍 1、布局器中的位置及使用 2、常用属性 二、属性功能介绍 1、常用信号 2、测试信号stateChanged(int) 3、组合框效果 三、Demo展示 此文为作者原创&#xff0c;转载标明出处&#xff01; 一、界面布局介绍 1、布局器中的位置及使用 QCheckBox复选…

除了console.log,你还用过console其它的属性么?

目录前言console.infoconsole.debugconsole.errorconsole.warnconsole.time 和 console.timeEndconsole.group 和 console.groupEndconsole.table前言 刚学习前端的时候&#xff0c;vue还没用vue-devtools&#xff0c;react还没用 React Developer Tools&#xff0c;我们经常通…

fastjson 1.2.47 RCE漏洞保姆级复现

1.漏洞概述 Fastjson提供了autotype功能&#xff0c;允许用户在反序列化数据中通过“type”指定反序列化的类型&#xff0c;Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法&#xff0c;那么当组件开启了autotype功能并且反序列化不可信数据时&…

Sklearn中的算法效果评估手段

我们曾在《算法效果评估&#xff1a;均方根误差&#xff08;RMSE&#xff09;/ 标准误差》一文中介绍过评估算法效果使用的主要方法&#xff1a;均方根误差&#xff08;RMSE&#xff09;&#xff0c;但在实际应用中&#xff0c;评估算法效果还有更多内容&#xff0c;本文我们以…