测试驱动javascript开发 -- 1.单元测试

简介:   从今天开始,我将以读书笔记的方式向大家介绍《Test-Driven JavaScript Development》相关内容。我不太清楚这本书是否已经有了中文的译本,有兴趣的朋友可以去搜索下,或者直接读英文原版。

  从今天开始,我将以读书笔记的方式向大家介绍《Test-Driven JavaScript Development》相关内容。我不太清楚这本书是否已经有了中文的译本,有兴趣的朋友可以去搜索下,或者直接读英文原版。因为是读书笔记,算是供大家参考学习的资料,所以文章中很多知识或者概念的定义或者讲解可能不会那么精确。只要大家能明白我表达的内容即可,没必要太较真。

  之前我写了《QUnit系列》有兴趣的朋友可以去阅读,他是当前比较流行的javascript测试的框架。通过学习QUnit相关知识,觉得很有必要丰富下自己的理论知识。只有有了强大的理论基础,你在工作上才会更有指导性和针对性。

  本文将介绍单元测试的相关知识,单元测试的好处和他面临的困难。

 

  什么是单元测试

  简单而言,单元测试是用来测试生产代码的一段代码,他通过在已知状态下设置一个或多个对象,执行测试代码,检查输出结果与期望值是否一致。他应该具有下面一些特点:容易开发、快速运行、在隔离的环境中测试软件组件(每个测试之间不能相互影响,保持原子性)、可重复执行等。开发单元测试的过程中,我们可能还需要使用 mock 或者 stub 方式去模拟依赖操作。

  单元测试应该在下面的情况下运行:

• 代码开发完成之后,验证相关功能的正确性;

• 代码发生改变的时候,验证它的行为没有发生改变;

• 当系统添加了新的单元项时, 确保他的功能正确,并保证没有对系统造成影响。

 

  在实际的工作中,大家可以使用市面上已有的测试框架进行开发,没有必要自动再动手制作自己的框架。这样做,一则可以减少开发时间、提高开发速度,再则别人框架已经提供了完善的相关api、框架也比较稳定,你不能保证你的框架就一定比别人的好。可选择的框架比较多,例如:QUnit,JSUnit等,大家可以自行找资料学习。如果学习QUnit,可以参照我之前的博文《QUnit系列》,或者去官网学习。

 

  单元测试的好处

  测试是一份投资,然而有些人反对单元测试,觉得他是在浪费时间。写单元测试确实需要时间,但是如果不使用它,有更好的办法吗。我们能做的恐怕只有执行一遍遍效率低下的手工测试了,而且还不一定能保证对系统的完全测试,要么就是直到问题产生的时候再测试。显而易见,单元测试还是有它的价值的,写一次测试代码,运行多次,当然有时候也需要对测试代码本身加以维护。

  1.回归测试

  在开发的过程中我们难免会犯错误产生一些bug,这些bug直到生产环境才发现。有时候我们修复了这个bug,但是产品发布的过程中也许会犯别的错误,导致这个bug没有修复或者再次出现。回归测试可以帮助我们解决这个问题。在产品发布之前,优先运行它,能够帮助我们即时捕获问题,得以确保产品质量。而且随着系统的变化,系统会变的越来越大,业务也许会变的越来越复杂。传统的人工回归测试可能难以应对(并不是说人工测试变的不重要),自动化测试会变得越发重要。

  关于这点我深有体会,因为之前的公司对产品质量相当看重,系统建立了一整套机制帮助开发和维护人员及时发现系统存在的问题。这套机制包括:记录系统错误日志、自动化测试、集[代码嵌入-单元测试-demo服务器发布]于一体的build系统、还有就是传统的人工测试。在产品发布之前会先运行自动化测试,确保demo环境中的系统核心功能没有受影响。自动化测试通过之后才能进行产品发布。产品发布之后,会再次运行自动化测试,确保现网核心功能没有问题。自动化测试对保证产品质量起到了相当重要的作用。

  当然,自动化测试有它的优势也有不足,所以还需要进行人工测试,共同保证产品的质量。

  2.重构

  重构就是在不影响代码功能的前提下,对他进行修改。例如:从一个方法中抽取一个帮助方法,保证代码的重用性,这就是重构;再或者对象或者方法的名字进行了修改,这也是重构。重构对于不断演进的系统,保持其架构设计的健壮性、重用性、灵活性有着相当重要的作用。当然,你需要在重构之后运行单元测试,这样才能保证你的重构对系统没有产生不良的影响。

  3.跨浏览器测试

  对于web开发者来说,我们开发的代码是要在不同的平台、不同的客户端上运行的。使用单元测试可以有效的减小我们测试的工作量。正所谓写一次测试代码,运行多次,我们可以在不同平台的不同客户端上运行我们的测试代码,保证我们的产品在不同环境下正常工作。

  4.其他好处

  精心编写的测试,对于系统来说相当于一份很好的说明文档,他可以帮助新来的开发人员更快的了解系统和相应功能。此外,通过编写测试,也可以帮助开发人员理清代码开发的思路。

 

  单元测试面临的困难

  些单元测试其实不是件容易的事,写出良好的单元测试需要不断的实践,是件具有挑战的事情。上节中提到的单元测试的好处,是建立在遵循最佳实践的基础上获得的。如果你写的是糟糕的单元测试,情况则完全不同,你会发现这种测试完全是在浪费时间,而且增加了维护成本。

  为了写出好的单元测试,你必须保证你的代码是可测试的。当你为一个可测试性不好的系统引入测试的时候,你会发现你的工作完全是一项不可完成的挑战。反过来也说明,单元测试对于暴露紧密耦合的代码和分离关注点是有帮助的。

  本书会通过一些具体的实例,来向大家介绍如何编写可测试的代码,以及如何写出好的单元测试。

 

  学学单元测试真的挺好,除了可以用来提高产品质量外,对于提高自己代码书写质量还是有帮助的,可以让自己养成很好的代码编写习惯。

目录
相关文章
|
4月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
107 7
|
3月前
|
机器学习/深度学习 人工智能 并行计算
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
|
3月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
406 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
5月前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
437 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
5月前
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
175 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
4月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
112 17
|
5月前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
189 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
5月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
183 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
4月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
90 7
|
4月前
|
数据采集 算法 数据处理
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
77 2

热门文章

最新文章