Typescript 测试驱动开发 TDD (3)

单元测试、集成测试和验收测试


自动化测试可以分为三个一般领域,或者说是三种类型的测试 - 单元测试、集成测试和验收测试。我们也可以将这些测试描述为黑盒或白盒测试。白盒测试是指内部逻辑或代码结构对于测评人员来说是已知的。而黑盒 测试则相反,它们是在测评人员不了解内部设计或逻辑的情况下进行的 测试。

 

单元测试


单元测试通常是一种白盒测试,其中对代码块的所有外部接口进行模拟或存根。例如,如果我们正在测试某段代码异步调用加载一块JSON数据,那么对该代码进行单元测试将需要模拟返回的JSON数据。这种技术确保被测试对象始终获得已知的数据集。当出现新需求时,这个已知的数据集当然可以增长和扩展。被测试对象应设计为与接口交互,以便在单元测试场景中轻松地模拟或存根这些接口。

 

构建自动化集成测试可以极大地提高您的应用程序质量。考虑我们一直讨论的情景 - 一个代码块调用 REST 服务获取一些 JSON 数据。有人很容易改变 REST 服务返回的 JSON 数据结构。尽管我们的单元测试仍然通过,因为它们实际上并没有调用 REST 服务,但是我们的应用程序会出现问题,因为返回的 JSON 不符合我们的预期。

 

没有集成测试,这些类型的错误只能在后期的手动测试阶段或可能仅在生产环境中被发现。系统中的故障被识别得越晚,修复它所需的成本就越高。

 

验收测试


验收测试是黑盒测试,通常基于场景进行。为了通过这些测试,可能需要涉及多个用户界面或用户交互。虽然这些测试通常由一个测试团队执行,但可以很容易地利用现代化的各种可用的测试工具来自动化执行。

 

自动化验收测试真的是测试领域的圣杯。人类很容易犯错,而使用一个测试团队来反复运行数百个验收测试并不总是可靠、昂贵且耗时。计算机非常擅长重复性任务,并且它们可以比人类更快地完成这些任务。例如,拥有一个能在夜间运行的自动化验收测试套件可以让开发团队尽早获得任何测试失败的信息,从而极大地降低成本。拥有一套完整的自动化验收测试还证明了应用程序正常工作,并且新功能没有意外地破坏旧功能。

 

单元测试框架


多年来,已经有许多为JavaScript构建的单元测试框架。其中一些最古老且最成熟的框架包括Jasmine(https://jasmine.github.io/)、QUnit(https://qunitjs.com/)和Mocha(https://mochajs.org/)。还有一些尝试在TypeScript中编写单元测试框架,包括MaxUnit或tsUnit,但这些框架从未真正流行起来。

 

在使用单元测试框架时,最重要的事情之一是考虑它具有的测试功能范围。例如,它是否具有引发错误的能力?是否可以轻松地模拟依赖项,比如对REST服务器的异步调用或从数据库返回行?是否可以允许特殊的测试代码完全替代函数调用?是否可以测试抛出异常,并且能够测试渲染后的DOM元素?

 

TypeScript与JavaScript库的轻松集成意味着我们可以像使用TypeScript编写的一样,使用一个功能齐全的JavaScript单元测试框架。大多数测试框架都具有类似的功能套件,包括监视模式,可以检测到测试文件的更改并自动重新运行测试。目前流行的一个测试框架是由Facebook团队开发的Jest,它与Babel、TypeScript、Node、React、Angular和Vue集成。在本系列中,我们将使用Jest来探索一个功能齐全的JavaScript测试框架所能提供的能力。

 

posted @ 2023-09-21 12:21  TonysDad  阅读(25)  评论(0编辑  收藏  举报