在 Roy Osherove 撰写的单元测试的艺术中,1970 年代就已经有单元测试的概念了。并且随着时代的推移,对於单元测试也循序渐进的完善其定义。而本书给出最初的定义如下:
一个单元测试就是一段程序码(通常是一个方法),这段程序呼叫了另一段程序码。然而验证某些假设的正确性。如果这些假设是错误的,单元测试就会失败。一个单元可以是一个方法或函数。
第一时间观看其定义,会觉得满合理的,毕竟单元测试的用意就是为了验证其方法是否符合预期结果。然而,在仔细观察其定义会发现,其定义提到的一段程序码(通常是一个方法),这段程序呼叫了另一段程序码
,这段程序码指的是一个工作单元,可能包山包海,可能验证了一个方法;但也有可能验证多个类别与函数。
换言之,可能会随着不同的开发者,定义出不一致的单元测试风格( A 开发者写出一只工作单元验证其方法的其中一个情境, B 开发者则写出一只工作单元验证功能所需要考量的情况)。
图 1、A 测试员的测试单元逻辑
图 2、B 测试员的测试单元逻辑
也因此,本书逐步修正了最初的单元测试定义:
一个单元测试是一段程序呼叫一个工作单元,并验证工作单元的一个具体最终结果。如果对这个最终结果的假设是错误的,那单元测试就失败了。一个单元测试的范围,可以小到一个方法,大到多个类别。
根据上述的定义,单元测试有了更完善的解释;然而,随着软件系统开发的开发周期缩短且复杂度提升,往往许多时候以往开发的单元测试成为了可怕的技术成本之一。比方说,开发一只新功能所花费的时间为一小时,但要验证这新功能的单元测试也同样要花费一小时,甚至更长,身为开发商大多会选择忽略以缩短短期内的开发时程,进而导致牺牲测试带来的长期维护效益。Roy Osherove 在本书提出优秀的单元测试应具备以下这些特点:
从以上观点,大致上可分成几个方向:
因此,总结以上叙述,Roy Osherove 在单元测试的艺术最终给出的单元测试定义如下:
一个单元测试是一段自动化的程序码,这段程序会呼叫被测试的工作单元,之後对这个单元的单一最终结果的某些假设或期望进行验证。单元测试几乎都是使用单元测试框架进行撰写的。撰写单元测试很容易,执行起来快速。单元测试可靠、易读、并且很容易维护。只要产品程序码不发生变化,单元测试的执行结果是稳定一致的。
接下来,明天会提起何时该用单元测试(换种说法,就是要判别何时不该用单元测试),会提起常跟单元测试一起讨论的整合测试、以及网页开发会提到的端点测试等做比较。
<<: D2- Google Apps Script (GAS) 的环境设定、专案结构(Trigger)与四种打包方式
缺失值处理 在处理大量资料时,资料有些会有缺失的情况,有分以下几种缺失的情况,随机缺失(Missin...
PHP运算符 赋值运算符 基本的赋值运算符是“=”。一开始可能会以为它是“等於”,其实不是的。它实际...
昨天稍微提到了状态管理及 MobX 的基本介绍那今天就要来说明 MobX 中的核心概念。 MobX ...
一个图形具有两个集合的基本组成:G(V,E) V:表示顶点的集合 V(G1)={1,2,3,4} E...
接续昨天的练习 1.将白色Solid Pre-compose起来 2.搜寻Camera Lens B...