Nodejs实战 —— 测试 Node 程序

读 《node.js实战2.0》,进行学习记录总结。

当当网购买链接

豆瓣网1.0链接

测试 Node 程序

本章内容

Node 的 assert 模块测试

使用其他断言库

使用 Node 单元测试框架

用 Node 模拟并控制 Web 浏览器

在测试失败时获取更多的信息

添加到 程序中的功能越来越多,出现的 bug 的风险就越高。没经过测试的程序是不完整的,而手动测试既繁琐又容易出错,所以自动测试越来越受欢迎。自动测试指的是编写代码来测试代码,而不是手动运行程序中的功能。

两种基本测试:单元测试和验收测试。单元测试直接测试代码逻辑,通常是在函数或方法层面,适用于所有类型的程序。单元测试可以分成两种形态:测试驱动开发(TDD) 和行为驱动开发(BDD)。实事求是地讲,TDD 和 BDD 基本是一样的,它们的区别在于风格上。这个是否重要取决于个人。验收测试一般是对 Web 程序进行的额外的测试,需要用脚本控制浏览器来触发 Web 程序的功能。

TDD 与 BDD

BDD :Behavior Driven Development 行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发人员、QA和非技术人员之间的协作。

BDD 的重点是通过与利益相关者的讨论取得对预期软件的行为的清醒认识。它通过用自然语言书写非程序员可读的测试用例扩展了测试驱动开发行为。行为驱动开发人员使用了混合领域中统一的语言的母语语言来描述他们的代码的目的。这让开发者取得以把精力集中在代码应该怎么写,而不是技术细节上,而且也最大程度减少了将代码编写者的技术语言与商业客户、用户、利益相关者、项目管理者等的领域语言之间来回翻译的代价。

TDD:Test-Driven Development 就是测试驱动开发,它是一种测试先于编写代码的思想,用于指导软件开发,测试驱动开发是敏捷开发中的一项核心时间和技术,也是一种方法论,TDD的原理是在开发功能代码之前,先编写单元测试用例,测试代码确定需要编写什么产品代码。

TDD 的基本思路是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。TDD的重要目的不仅仅是测试软件,测试工作保证代码只是其中一个部分,而且在开发过程中帮助客户和程序员去除模棱两可的需求。TDD 首先考虑使用的需求(对象、功能、过程、接口等)。主要编写的测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。优点是在任意一个开发节点都可以拿出一个使用,含少量bug 并具有一定功能和能够发布的产品。缺点是增加代码量,测试代码是系统代码的两倍或者更多,但是同时节省了调试程序及挑错的时间。

TDD 的原则:

独立测试:不同的代码的测试应该互相独立,一个类对应一个测试类,一个函数对应一个测试函数。用例也应各自独立,每个用例不能使用其他用例的结果数据,结果也不能依赖用例执行顺序。一个角色,开发过程中包含多种工作,做不同工作时应专注于当前的角色,不要过多考虑其他方面的细节

测试列表:代码的功能点可能很多,并且需求可能是陆续出现的,任何阶段想添加功能时,应把先把功能点加到测试列表中,然后才能继续手头工作,避免疏漏。

测试驱动:即利用测试来驱动开发,是 TDD 的核心。要实现某个功能,要编写某个类或某个函数,应首先编写测试代码,明确这个类、函数如何使用、测试,然后再对其进行设计、编码。

先写断言:编写测试代码时,应该首先编写判断代码功能的断言语句,然后编写必要的辅助语句。

可测试性:产品代码设计、开发时应尽可能提高可测性。每个代码单元的功能应该比较单纯,每个类应该只做它应该做的事情,尤其是增加新功能,不要为图一时的便利,随便在原有代码中添加功能。多考虑使用子类、继承、重载的方法

及时重构:对结构不合理,重复不好的代码,在测试通过后,应及时进行重构。

小步前进:软件开发是复杂性很高的工作,小步前进是降低复杂性的最好的方法。

对于单元测试,会介绍 Node 的 assert 模块、Mocha、Vows、Should.js 框架和 Chai。对于验收测试,我们会介绍Node 中使用 Selenium。

测试类型 分类 工具 描述
单元测试   TDD   Mocha/Jasmine/Node 中的 assert 模块/Chai   测试程序逻辑  
  BDD   Mocha/Vows/Chai/Should.js    
验收测试   浏览器   WebdriverIO/Selenium   测试程序界面和功能  
  无头   WebdriverIO/Phantom/Zombie.js    
单元测试

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxjzz.html