搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
从前慢现在也慢
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
基于微信小程序的大学生心理健康服务平台【论文、源码、开题报告】_基于微信小程序的心理健康分享与在线辅导平台
2
Git错误:Incorrect username or password ( access token )_incorrect username or password (access token)
3
(最新)IntelliJ IDEA卸载解决方案_uninstall hasn't detected
4
51单片机蜂鸣器演奏《小苹果》C语言程序,C利用51单片机蜂鸣器演奏音乐
5
Springboot+Vue项目-基于Java+MySQL的电影院购票系统(附源码+演示视频+LW)
6
Spark系列之Spark启动与基础使用
7
语义分割论文杂读_collaborative globallocal networks for memory-effi
8
学成在线day13 支付通知,2024年最新讲的明明白白
9
Python1️⃣:0小白基础之——数字专题_1<<0python
10
03 蓝桥杯单片机设计与开发_基础模块_DS1302_蓝桥杯单片机设计与开发会给哪些资源
当前位置:
article
> 正文
软件工程师必知的12个单元测试技巧_测试工程师常用的测试技巧
作者:从前慢现在也慢 | 2024-05-16 22:08:04
赞
踩
测试工程师常用的测试技巧
转自http://developer.51cto.com/art/200809/88511.htm
单元测试是敏捷软件开发的一个重要组成部分。这种方法最初由Kent Beck引入,现在已经深入人心在很多企业系统中使用。单元测试可以帮助开发人员降低漏洞数量,减少花费在调试上的时间,有助于开发更健壮更稳定的软件。
在本篇文章中我们将介绍软件工程师都可以使用的12个单元测试技巧,适用于任何编程语言和编程环境。
1、使用单元测试降低风险
新手可能会问“为什么我应该编写测试代码?”的确,很多人会这样想:测试工作不是应该由进行验收工作的测试人员来完成吗?这种想法在现代软件工程学中已经没有立足之地。软件团队的目标是开发高质量的软件。无论是个人用户,还是企业用户,已经无法接受上世纪80年代和90年代充满漏洞的软件。
现在你可以使用丰富的类库资源、Web服务和支持重构及单元测试的综合开发环境,在软件中再出现漏洞就没有任何借口可找了。
单元测试背后的思想是,为每一个软件单元、模块和构建创建一个测试代码。单元测试让软件持续测试变得很简单;与手动测试不同,你可以轻松的重复执行单元测试。
随着你的软件规模变大,单元测试部分也随之变大。每一个测试都是系统正常运行的保障。代码中存在漏洞就意味着软件具有潜在风险。通过利用一系列单元测试,开发者可以大大降低漏洞的数量,降低未经实际运行验证的程序的风险。
2、为每一个主要构件编写一个测试用例
当人们开始使用单元测试时,常常会先问“我应该编写什么测试?”
人们最初的想法可能是要编写大量的功能测试,也就是对系统不同的功能进行测试验证。其实这种想法这是不对的。正确的做法应该是为每一个主要构件创建一个测试用例。
测试的重点应该是一个构件。在每一个构件内找到它的所有接口,也就是这个组件对外公开的方法集。然后你才应该为每一个公开的方法编写一个测试。
3、创建抽象测试用例和添加测试工具
无论任何程序,都有一些共性的东西需要你对其进行测试。那么你首先应该为你的语言寻找一个单元测试。
举个例子来说,很多Java开发者使用Junit来进行单元测试,它是一个简单但强大的测试框架。它具有一个TestCase类,是所有测试的基类。
在你的开发环境中增加方便的方法和可用的工具。这样所有你的测试用例可以具有共同的基础构架,维护起来就非常容易。
4、编写敏捷测试
测试工作非常耗时,因此请确保你的测试是有效的。好的测试应该针对每个模块的核心功能,而不是事无巨细挨个测试。
举个例子来说,你没有理由来为Java Bean的Setter和getter方法来单独编写测试代码,因为它们肯定会测试中被涉及到的。
相反,你应该针对软件系统的行为来编写测试代码。你不需要面面俱到;为现在想到的东西先创建测试,然后想到别的再回来增加更多测试。
5、为每一个测试创造干净的环境
软件工程师们总是很在乎效率,视效率如生命。因此如果你告诉他们,每一个测试需要单独创建的话,他们会认为比较浪费时间。
然而这一点是非常重要的,如果一个测试因为使用了一些其它测试的老数据而失败,显然这是你最不想发生的事情。因此请确保每一个测试被正确的创建,而不要担心所谓的效率。
如果你所有的测试具有一个共同的环境,它并不随着测试的运行而改变,那么你可以在你的测试基类中增加一个静态的创建区。
6、使用模拟对象(Mock Objects)进行有效测试
建立测试并不总是一件简单的事情,在有些时候你的第一感觉往往是没有办法进行测试。
举个例子来说,如果在你的程序中使用了Amazon Web服务,如何在不影响真实系统的前提下在测试中模仿它呢?
其实有很多方法可用。你可以创建一些虚假的数据,然后在测试中使用它们。在有用户的系统中,可以创建一系列专门用于测试的账号。
对一个生产系统进行测试是一件非常危险的做法:如果发生点什么错误,你可能会误删真正的用户数据。一个可行的办法就是使用假数据,又叫做模拟对象(stubs or mock objects)。
模拟对象实现了特定的接口,但是返回预先定义好的结果。举个例子来说,你可以为Amazon S3创建一个模拟对象,它只从你的本地硬盘中读取预先设置好的数据,而不去使用真实服务数据。
在对具有很多构件的复杂系统进行测试的时候,模拟对象是非常有用的。在JavaScript中有几个框架可以非常方便的创建模拟对象,其中最出名的是JMock。
7、代码重构时也对测试代码进行重构
你只有对测试工作真正投入,它才会发挥更大的作用。你不仅仅要编写测试,你还需要确保它们及时更新。当为一个组件增加一个新方法时,你需要同时增加一个或更多的相应测试。同样,如果你要删除无用代码的话,也要删除已经不再有用的测试。
在进行大量重构工作的时候单元测试尤其有用。利用重构可以大大提高我们的编程效率,不过对代码完成了重构后,别忘了也对测试进行相应的修改,并要重新运行一下所有相关测试,以确保在进行程序改动的时候没有出现错误。
8、针对发现的程序漏洞编写测试
在减少漏洞方面,单元测试是一个非常有用的武器。当你发现了代码中的问题后,在对其进行修复以前,先编写一个测试来让这个问题可以在测试的时候暴露出来。这样,如果这个问题在其它地方重新出现的话,你就可以在测试的时候轻松发现它们。
这是一个非常有用的经验,因为你不可能总是马上就编写出能发现所有问题的测试代码。当你增加了针对某种漏洞的测试后,实际上你的测试代码距离完美又靠近了一步。
9、使用单元测试来确保性能
除了确保代码的正确性之外,单元测试还可以帮助我们确保代码的性能不会随时间而下降。在很多系统中存在这个问题,随着系统开发工作的继续进行,被加入了越来越多的代码,会变得越来越慢。
要想编写性能测试,你需要在你的测试基类中增加start和stop功能函数。在单元测试阶段就开始考虑性能测试是非常必要的,这样在代码发生改变或者对代码进行了优化时就能看出这些改变是否会影响到性能,能尽早的发现代码变更对性能的影响。
一个系统的性能如果拆分来看,可以看成若干单元性能的一个有机结合,单元的性能势必也会对整个系统的性能产生影响,所以尽早考虑性能测试是很必要的,当然这需要很好的分析和设计了。
10、为并发代码创建测试
并发代码通常不容易控制,通常是许多漏洞的源头。因此对它们进行单元测试是非常重要的。实现方法是使用一个休眠和锁定机制。如果你需要等待一个特定的系统状态,你可以在你的测试中 使用休眠调用功能。
尽管这并不是一个完全正确的解决办法,但是在很多情况下它已经够用了。
如果要在一个更加复杂的场景中模拟并发性,你需要围绕你测试的对象进行锁的传递。这样你可以模拟并发系统,不过它是线性的。
11、连续运行测试
软件测试的要点就是多多运行它们。尤其在大型开发团队中,常常有数十个开发者共同修改同一个程序,这种情况进行连续的单元测试是非常重要的。
你可以每隔几个小时运行一次测试,也可以每次当有代码加入的时候运行测试,或者每天运行一次测试。根据自己的实际情况决定哪一种方法最适合你的项目,然后让测试自动连续运行。
12、享受测试的乐趣
这可能是软件测试中最重要的技巧。当我第一次发现单元测试的时候,我怀疑它简直就是一件多此一举的事情。但是我还是尝试着接受了它,因为我信赖的一些优秀程序员告诉我它非常有用。
技术大师Martin Fowler曾表示,单元测试能够使你更快地完成工作。无数次的实践已经证明这一点。你的时间越是紧张,就越是要写单元测试,它看上去慢,但实际上能够帮助你更快、更舒服地达到目标。
单元测试可以让你的大脑处于一种完全不同于编程时的状态。为一个指定的构件设计一个简单又正确的测试代码是一件非常有意思的事情。
一旦你开始编写测试,你会发现你已经离不开它。为了让测试变得更有趣,你可以与别人进行结对编程(pair programming)。无论你是与同伴一起编写测试,还是互相为对方编写测试,都可以体验到其中的乐趣。最终你将会非常高兴的认为你的系统可以真正运行,因为它通过了你的测试。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/580677
推荐阅读
article
微信
小
程序
开发
教学系列(12)- 实战项目案例_
小
程序
开发
实例...
ToDoList是一个用于记录和管理任务的
小
程序
。用户可以添加、编辑、完成和删除任务,以及查看任务清单。_
小
程序
开发
...
赞
踩
article
python
输入
10
个
数
、
找出
对称
数
_
找出
最
接近的
对称
数
字...
找出
几个候选答案然后比较差值(
最
多为4个)长度为1,#长度为1,直接减一返回开头为1,9~~9为一个候选答案 例:
10
...
赞
踩
article
SpringBoot
进阶篇...
今天的博客主题
SpringBoot
——》
SpringBoot
进阶篇springBoot是如何整合springMVC1)...
赞
踩
article
Git
使用方式_
github
如何给每个
目录
添加
描述
信息
...
因为工作需要,整理了一个关于
Git
使用的ppt,这里同步记录一下。1. 什么是
Git
Git
,全称是分布式版本控制系统,G...
赞
踩
article
git
配置
过程(转载自
知
乎
)
_
git
gui
知
乎
...
1、Git的下载与安装Git下载地址如下Git - Downloads
git
-scm.com根据系统需求下载相应的Gi...
赞
踩
article
PDF
生成
目录
和
页码
点击
跳转
(新)...
因为之前 用 Anchor 写的,这东西 放到Paragraph 里就不好使了。这回
目录
里 和
跳转
的地方 用的都是 ...
赞
踩
article
无人机
+光电
吊舱
:四光(
可见光
+
红外热
成像+广角+
激光测距
)
吊舱
设计技术详解...
这些技术的综合应用,使得四光
吊舱
能够为
无人机
提供全面、精确的侦察和测量能力,为
无人机
在军事、农业、物流、城市管理、救援等...
赞
踩
article
微信
小
程序
开源
项目
库汇总_
微信
小
程序
文字游戏
类
开源
项目
地址...
微信
小
程序
开源
项目
库汇总 http://www.opendigg.com/tags/wechat-appawesome-...
赞
踩
article
Redis
作为
缓存
出现的问题及
解决方案
_
如果
java
对
一个
对
象新增修改后保存至
redis
失败了该怎么...
当MySQL数据库产生新的insert、update、delete等操作时,产生binlog操作日志(类似于MySQL的...
赞
踩
article
Github
-
Action
-
Workflow
-概念和基本操作_
github
workflows
...
上面代码中,steps字段只包括一个步骤。该步骤先注入四个环境变量,然后执行一条 Bash 命令,当代码。除了代码库事件...
赞
踩
article
mac
安装
exe
文件
的方法
mac
怎么
安装
exe
文件
_
苹果电脑
安装
exe
软件...
mac
OS怎么
安装
exe
程序?设置完Windows基础信息,便要选择Windows系统
安装
的分区,选中磁盘分区,单击【格...
赞
踩
article
无人机
民航执照
、
AOPA
多旋翼
、
固定翼视距内
驾驶员
、
机长
考证
试题+
解析
+答案(
无人机
考证
试题库
,
持续...
无人机
考证
考
试题库
(1000题
,
解析
+答案)持续更新中
无人机
考证
,
民航执照
、
AOPA
执照
、
无人机
驾驶员
,
AOPA
考证
_无...
赞
踩
article
CentOS7
L
in
ux下安裝
python
-
pip
(
python
2.7)_
which
pip
n...
一,简介
pip
是
python
语言的包管理工具,一些
python
语言的拓展功能(拓展模块)可以使用
pip
工具直接联网下载安...
赞
踩
article
ubuntu
22.04
lts
bind9
局域网
DNS
服务器
搭建 泛域名
配置
_
ubuntu
bi...
ubuntu
22.04
lts
bind9
局域网
DNS
服务器
搭建 泛域名
配置
,此教程可搭建内部自用域名
服务器
,支持泛...
赞
踩
article
HarmonyOS
应用
开发者
初级
认证
试题库(
鸿蒙
)_
鸿蒙
初级
认证
...
HarmonyOS
应用
开发者
初级
认证
试题库(
鸿蒙
)_
鸿蒙
初级
认证
鸿蒙
初级
认证
目录 考试链接:...
赞
踩
article
CSDN
积分
如何才能
获得
_
csdn
积分
怎么得...
每篇博文阅读次数超过100次:每篇文章阅读超过100次,你可以
获得
1分,但阅读加分最高不超过100分。上传有效资源:如果...
赞
踩
article
如何
查看
CSDN
积分
_怎么
查看
csdn
积分
...
2.在弹出的页面中选择内容管理。1.将鼠标移到头像那里。3.选择数据→作品数据。_怎么
查看
csdn
积分
怎么
查看
csdn
积...
赞
踩
article
熟悉常用的
Linux
操作
和
Hadoop
操作
_熟悉常用的
linux
操作
和
hadoop
操作
...
该文章介绍了常用的
Linux
命令和
Hadoop
操作
,包括cd、ls、mkdir、rmdir等命令的使用方法,以及...
赞
踩
article
unity
3d
保存
代码生成
的
Mesh
到
Assets
目录下_
unity
保存
mesh
...
Unity-
Mesh
Saver/
Mesh
SaverEditor.cs at master · pharan/Unity-...
赞
踩
article
青鸟智联
校园
管理系统
_
需求
分析
说明书
_
校园
赛事系统
需求
分析
说明书
...
青鸟智联
校园
管理系统
_
需求
分析
说明书
_
校园
赛事系统
需求
分析
说明书
校园
赛事系统
需求
分析
说明书
作者...
赞
踩
相关标签
微信小程序
小程序
小程序开发
python输入10个数、找出对称数
git
github
pdf
windows
linux
java
无人机
redis
缓存
数据库
macos
python
python-pip
安装
ubuntu
harmonyos
华为