《程序员修炼三部曲》是一套由四本小册子组成的丛书,旨在帮助解决程序员在日常工作中遇到一些具体问题和需要,覆盖了对于现代软件开发非常重要的基础性知识。这套丛书不仅展现了注重实效的实际技巧、工具使用,也贯穿了作者们在其名作《程序员修炼之道:从小工到专家》中所坚持的开发哲学。而所有这些,都是帮助开发人员和开发团队进行正常开发,并带来高开发效率的利器。\r\n 《单元测试之道Java版——使用JUnit》是本丛书的第二本(本书还有C#版本《单元测试之道C#版——使用JUnit》),阐述使用自由公开的JUnit程序库以Java语言进行单元测试,其内容也广泛适用于其他语言和框架程序库。本书主要内容包括:如何更高效地撰写bug更少的代码:如何发现bug的藏身之处以及如何清除bug;如何测试代码片断而不用牵连整个项目;如何利用JUnit简化测试代码;如何在团队中高效地进行测试,等等。\r\n 本书主要适用于具有一定编程和设计经验,但是对单元测试并不是很有经验的Java程序员。
关于程序员修炼三部曲\r\n前言\r\n第1章 序言\r\n 1.1 自信地编码\r\n 1.2 什么是单元测试\r\n 1.3 为什么要使用单元测试\r\n 1.4 我需要做什么呢\r\n 1.5 如何进行单元测试\r\n 1.6 不写测试的借口\r\n 1.7 本书概要\r\n第2章 你的首个单元测试\r\n 2.1 计划你的测试\r\n 2.2 测试一个简单的方法\r\n 2.3 更多的测试\r\n第3章 使用JUnit编写测试\r\n 3.1 构建单元测试\r\n 3.2 JUnit的各种断言\r\n 3.3 JUnit框架\r\n 3.4 JUnit测试的组成\r\n 3.5 自定义JUnit断言\r\n 3.6 JUnit和异常\r\n 3.7 关于命名的更多说明 \r\n 3.8 JUnit测试骨架\r\n第4章 测试哪些内容:Right-BICEP\r\n 4.1 结果是否正确\r\n 4.2 边界条件\r\n 4.3 检查反向关联\r\n 4.4 使用其他手段来实现交叉检查\r\n 4.5 强制产生错误条件\r\n 4.6 性能特性\r\n第5章 CORRECT边界条件\r\n 5.1 一致性\r\n 5.2 有序性\r\n 5.3 区间性\r\n 5.4 引用/耦合性\r\n 5.5 存在性\r\n 5.6 基数性\r\n 5.7 时间性\r\n 5.8 自己动手尝试\r\n第6章 使用Mock对象\r\n 6.1 简单的替换\r\n 6.2 Mock对象\r\n 6.3 测试Servlet\r\n 6.4 Easy Mock对象\r\n第7章 好的测试所具的品质\r\n 7.1 自动化\r\n 7.2 彻底的\r\n 7.3 可重复\r\n 7.4 独立的\r\n 7.5 专业的\r\n 7.6 对测试进行测试\r\n第8章 在项目中进行测试\r\n 8.1 把测试代码放到哪\r\n 8.2 测试的礼貌\r\n 8.3 测试的频率\r\n 8.4 测试与遗留代码\r\n 8.5 测试与评审\r\n第9章 设计话题\r\n 9.1 面向测试的设计\r\n 9.2 为测试而重构\r\n 9.3 测试类的不变性\r\n 9.4 测试驱动的设计\r\n 9.5 测试无效的参数\r\n附录A Gotchas \r\n A.1 只要代码能工作就可以\r\n A.2 “冒烟”测试\r\n A.3 “请让我的机器来运行”\r\n A.4 浮点数问题\r\n A.5 测试耗费的时间太多了\r\n A.6 测试总是失败\r\n A.7 在某些机器上测试失败\r\n A.8 我的main没有被运行\r\n附录B 安装JUnit\r\n B.1 命令行安装\r\n B.2 管理用吗 \r\n附录C JUnit\r\n C.1 辅助类\r\n C.2 基本模板\r\n附录D 资源\r\n D.1 网络资源 \r\n D.2 参考书目\r\n附录E 注重实效的单元测试:总结\r\n附录F 习题答案\r\n索引
随着敏捷开发方法的风行,单元测试的思想也在遍地开花。越来越多的开发人员和公司开始学习和接受这种思想,并且在日常的开发工作中进行一些尝试。但是在尝试中,人们却遇到了不少问题和障碍。比如,如何将单元测试的思想传播给小组中的每一位成员,并让他们心悦诚服地接受;如何坚持这种边写边测的做法并最终养成一种习惯;如何进行高效的单元测试,而不是把时间无意义地浪费在对getter、setter的测试之上。
在UT中,Dave和Andy为我们揭开了这层层面纱,游刃有余地为我们展现单元测试的世界。尤其难能可贵的是,作者并没有采用列举教条的方式来说教,而是以一种与朋友对话谈心的方式来说服你,进而从良师益友的角度来教导你,最后再很有导师风范地给你指明一些设计层次上的问题;最终让你充满自信,做到对代码胸有丘壑。我相信,本书将不仅仅是学习单元测试的starter kit,还将会成为你工作中常伴身边的良师益友。
对于每个在单元测试上探索和工作的读者,本书希望能够帮助你们少跌几次跤,少碰几次壁,尽快踏上单元测试的康庄大道。这也是作者和我们的愿望。
本书由我和陶文两人合译。陶文的文笔技术都很不错,与他合作是一段美妙的经历。本书编辑方舟、陈元玉付出了辛勤的工作,为中文版增色不少。力求体现原书的思想精髓,使作者的睿智之言不因语言转化而略失光彩,这是我们最大的心愿。同时,也希望读者阅读过程中能够提出宝贵意见,帮助我们不断提高和改进译本。
在此,我要感谢周筠老师、陈英老师、方舟、陈元玉和我的爱人!
Andrew Hunt和David Thomas是Pragmatic Programmers的合伙人。他们不但为客户开发复杂的软件系统,而且为开发者和项目经理提供具有实务的各种资源。他们的第一本书《程序员修炼之道——从小工到专家》(The Pragmatic Programmer:From jouneyman to master)是面向技术和实践的畅销书籍,旨在让编码过程更加高效和有趣。
欢迎来到单元测试的世界。我们希望这本书能成为你和你的团队非常有价值的资源。你可以告诉我们它给你带来的帮助,或者我们需要做哪些改进,也可以通过访问我们网站 中为《Pragmatic Unit Testing(单元测试之道)》专门开设的网页,并点击“FeedBack”来给我们提供反馈。
反馈能使这些书变得更加优秀,从而使开发者本身甚至整个项目都变得更加优秀。注重实效的(Pragmatic)程序员几乎都是使用这种来自现实的反馈(如单元测试)来优化代码,调整设计。
是什么让我们对单元测试如此重视呢?我们都明白,对一个程序员而言,单元测试是非常重要的,因为它提供了你所需要的反馈。试想,如果没有单元测试的话,你可能就像在一个yellow legal pad 上写程序,只能做最好的祈祷来盼望它能够正常运行。
这当然不是个可行的做法。
对此,本书可以给你提供帮助,它主要针对的读者是那些具有一定编码和设计经验,但是对单元测试并不是很有经验的Java程序员。
虽然我们是使用Java来编写书中的代码,使用的是JUnit框架;但是就单元测试中的这些概念而言,无论你用的是什么语言,比如C++、Fortran、Ruby、Smalltalk或者VisualBasic都是一样的;而且迄今为止,有超过60种不同的语言具有自己的、类似于JUnit的测试框架,这些框架都可以从网上免费下载 。
对于已经用过单元测试的一些高级程序员,我们希望本书同样可以给你带来一些惊喜。你们可以跳过介绍JUnit用法的那些基础性章节,把精力放到后面的一些章节,内容包括如何来考虑怎样测试,测试是如何影响设计的,以及你可能会遇到的某些能影响整个开发小组的问题。
而且,要记住本书只是一个开始。它可能是你读过的第一本讲述单元测试的书,但是我们不希望它是最后一本。
u 何处获取源码
在本书的许多地方,你都会发现Java代码的例子;其中某些是完整的程序,而另外一些则是一些程序的片断。如果你希望运行这些例子代码,或者查看完整的源码(而不是书中所给出的代码片断),你可以留意一下源码所在页的边缘:我们将会给出包含该源码片断的完整源码所在的文件名。
某些源码片断将会随着讨论的深入不断增加,因此在某些主目录和子目录中,你会发现一些源码文件的名字是相同的,只是子目录所在的版本有更新而已(如rev1,rev2等等)。
本书中所有代码可以在本书专题网站上获取,地址为:
http//www.pragmaticprogrammer.com/starter kit/ut/index.html