xUnit 测试模式
重构测试代码
2007
如果您访问 junit.org,您会看到我的一句话:“在软件开发领域,从未有如此多的人因为如此少的几行代码而受益匪浅”。JUnit 被批评为小事一桩,任何合格的程序员在周末都能写出来。这是真的,但完全没有抓住重点。JUnit 的重要性在于,它值得丘吉尔式的赞誉,因为这个小工具的存在对于许多程序员来说至关重要。测试已成为编程中最重要的部分。人们以前也提倡过这一点,但 JUnit 比其他任何东西都更能实现这一点。
当然,不仅仅是 JUnit。许多编程语言都编写了 JUnit 的移植版本。这个松散的工具家族通常被称为 xUnit 工具,它们已经远远超出了 Java 的根源。(当然,根源并不真正存在于 Java 中,因为肯特·贝克在几年前就为 Smalltalk 编写了此代码。)
xUnit 工具,更重要的是其理念,为编程团队提供了巨大的机会。编写强大的回归测试套件的机会,使团队能够以更小的风险对代码库进行重大更改。使用测试驱动开发重新思考设计流程的机会。
但随着这些机会的出现,也带来了新的问题和新技术。与任何工具一样,xUnit 家族可以很好地使用或不当使用。有思想的人已经想出了各种使用 xUnit、有效组织测试和数据的方法。就像对象早期一样,真正使用工具的大部分知识都隐藏在其熟练用户的头脑中。如果没有这些隐藏的知识,您就无法真正获得全部好处。
大约二十年前,面向对象社区的人们意识到了对象存在这个问题,并开始制定答案。这个答案是用模式的形式描述他们的隐藏知识。杰拉德·梅萨罗斯是这方面的先驱之一。当我第一次开始探索模式时,杰拉德是我学习过的领导者之一。与模式世界中的许多人一样,杰拉德也是极限编程的早期采用者,因此从最早的时候就开始使用 xUnit 工具。因此,他应该承担起以模式的形式捕获专家知识的任务,这是完全合乎逻辑的。
从我第一次听说这个项目开始,我就对此感到兴奋。(我不得不发动一场突袭,从鲍勃·马丁那里偷走这本书,因为我想让它成为我的系列。)像任何一本好的模式书一样,它为该领域的初学者提供了知识,同样重要的是,它为经验丰富的从业者提供了词汇和基础,以便他们将自己的知识传授给同事。对于许多人来说,著名的四人帮书籍解锁了面向对象设计的隐藏宝藏,这本书对 xUnit 也是如此。