接下来是《Testing Objected-Oriented Systems, Models, Patterns, and tools》(《面向对象系统测试 模型,视图与工具》)这本大部头的书,我手中的是清华大学出版社出版的影印本,其中没有直接的对单元测试的定义,但在描述class scope testing时,有如下描述(P350):
“Class scope testing corresponds with the classical definition of unit testing: exercising a relatively small software component, usually via a driver, in isolation.”
我认为这段话也清楚地表明了作者认为针对类的测试是属于单元测试的立场。
当然,还有一些书中的对单元测试的描述我也进行了引用,例如,在《The art of Software Testing (2nd)》一书中,单元测试被描述为:
“Module testing (or unit testing) is a process of testing the individual subprograms, subroutines, or procedures in a program. That is, rather than initially testing the program as a whole, testing is first focused on the smaller building blocks of the program.”
在《Pragmatic Unit Testing in C Sharp with NUnit》书中,单元测试描述如下:
“A unit test is a piece of code written by a developer that exercises a very small, specific area of functionality of the code being tested. Usually a unit test exercises some particular method in a particular context. For example, you might add a large value to a sorted list, then confirm that this value appears at the end of the list. Or you might delete a pattern of characters from a string and then confirm that they are gone.
Unit tests are performed to prove that a piece of code does what the developer thinks it should do.”
总之,从以上的内容来看,似乎没有任何一本书直接支持《软件测试方法和技术》中提到的这个观点。
对于单元测试,我的观点是:
单元测试是针对“单元”的测试,这是毫无疑问的。但何谓“单元”,则并没有特别明确的区分,在不同的上下文语境中,单元可以是不同的含义。在RUP中,单元测试的对象可以是文件、DLL或是类等等。
从《Systematic Software Testing》提供的单元测试模板来看,在确定单元测试范围的时候,单元测试范围的内容可以是“Unit/Module/Component”,可见,在作者看来, 单元测试的范围可以是Unit(代码片断)、Module(模组)或者是Component(构件)。
从目前的TDD和单元测试的发展趋势来看,在使用面向对象方法开发的系统中,越来越多的人倾向于将单元测试理解为针对类的测试,或是针对几个紧密联系的类的测试,并不需要被测单元具有UI层面上的含义(例如,一个纯粹的算法类)。
在实际的工作中,具体“单元”的选取应该是根据具体的情况来确定的,没有一个非常统一的标准。例如,如果该系统大量使用外部的组件(component),单元测试的内容更多的是以组件来进行,但如果系统开发中要求对每个类进行测试,类就应该是单元测试的最好关注单位。
文章来源于领测软件测试网 https://www.ltesting.net/