《Python测试驱动开发》试读:前言

我试图通过这本书与世人分享我从黑客变成软件工程师的过程。本书主要介绍测试,但很快你就会发现,除此之外还有很多其他内容。 感谢你阅读本书。 如果你购买了本书,我十分感激。如果你看的是免费在线版,我仍然要感谢你,因为你确定这本书值得花时间来阅读。谁知道呢,说不定等你读完之后,会决定为自己或朋友买一本纸质书。 如果你有任何评论、疑问或建议,希望你能写信告诉我。你可以通过电子邮件直接和我联系,地址是obeythetestinggoat@gmail.com;或者在Twitter上联系我,我的用户名是@hjwp。你还可以访问本书的网站和博客(http://www.obeythetestinggoat.com/),以及邮件列表(https://groups.google.com/forum/#!forum/obey-the-testing-goat-book)。 希望阅读本书能让你身心愉悦,就像我在写作本书时感到享受一样。 为什么要写一本关于测试驱动开发的书 我知道你会问:“你是谁,为什么要写这本书,我为什么要读这本书?” 我至今仍然处在编程事业的初期。人们说,不管从事什么工作,都要历经从新手到熟手的过程,最终有可能成为大师。我要说的是,我最多算是个熟练的程序员。但我很幸运,在事业的早期阶段就结识了一群测试驱动开发(Test-Driven Development,TDD)的狂热爱好者,这对我的编程事业产生了极大影响,让我迫不及待地想和所有人分享这段经历。可以说,我很积极地做出了最近这次转变,而且这段学习经历现在还历历在目,我希望能让初学者感同身受。 我在开始学习Python时(看的是Mark Pilgrim写的Dive Into Python),偶然知道了TDD的概念。我当时就认为:“是的,我绝对知道这个概念的意义所在。”或许你第一次听说TDD时也有类似的反应吧。它听起来像是一个非常合理的方案,一个需要养成的非常好的习惯——就像经常刷牙。 随后我做了第一个大型项目。你可能猜到了,有项目就会有客户,有最后期限,有很多事情要做。于是,所有关于TDD 的好想法都被抛诸脑后。 的确,这对项目没什么影响,对我也没影响。 但只是在初期如此。 一开始,我知道并不真的需要使用TDD,因为我做的是个小网站,手动检查就能轻易测试出是否能用。在这儿点击链接,在那儿选中下拉菜单选项,就应该有预期的效果,很简单。编写整套测试程序听起来似乎要花费很长时间,而且经过整整三周成熟的代码编写经历, 我自负地认为自己已经成为一名出色的程序员了,我能顺利完成这个项目,这没什么难度。 随后,项目变得复杂得可怕,这很快暴露了我的经验不足。 项目不断变大。系统的不同部分之间要开始相互依赖。我尽量遵守良好的开发原则,例如“不要自我重复”(Don’t Repeat Yourself,DRY),却被带进了一片危险地带。我很快就用到了多重继承,类的继承有八个层级深,还用到了eval 语句。 我不敢修改代码,不再像以前一样知道什么依赖什么,也不知道修改某处的代码可能会导致什么后果。噢,天呐,我觉得那部分继承自这里,不,不是继承,是重新定义了,可是却依赖那个类变量。嗯,好吧,如果我再次重定义以前重定义的部分,应该就可以了。我会检查的,可是检查变得更难了。网站中的内容越来越多,手动点击变得不切实际了。最好别动这些能运行的代码,不要重构,就这么凑合吧。 很快,代码就变得像一团麻,丑陋不堪。开发新功能变得很痛苦。 在此之后不久,我幸运地在Resolver Systems 公司(现在叫PythonAnywhere)找到了一份工作。这个公司遵循极限编程(Extreme Programming,XP)开发理念。他们向我介绍了严密的TDD。 虽然之前的经验的确让我认识到自动化测试的好处,但我在每个阶段都心存疑虑。“我的意思是,测试通常来说可能是个不错的主意,但果真如此吗?全部都要测试吗?有些测试看起来完全是在浪费时间……什么?除了单元测试之外还要做功能测试?得了吧,这是多此一举!还要走一遍测试驱动开发中的‘测试/ 小幅度代码改动/ 测试’ 循环?太荒谬了! 我们不需要这种婴儿学步般的过程!既然我们知道正确的答案是什么,为什么不直接跳到最后一步呢?” 相信我!我审视过每一条规则,给每一条捷径提出过建议,为TDD 的每一个看似毫无意义的做法寻找过理由,最终,我发现了采用TDD 的明智之处。我记不清在心里说过多少次“谢谢你,测试”,因为功能测试能揭示我们可能永远都无法预测的回归,单元测试能让我避免犯很愚蠢的逻辑错误。从心理学上讲,TDD 大大降低了开发过程中的压力,而且写出的代码让人赏心悦目。 那么,让我告诉你关于TDD 的一切吧! 写作本书的目的 我写这本书的主要目的是要传授一种用于Web 开发的方法,它可以让Web 应用变得更好, 也能让开发者更愉快。一本书如果只包含一些上网搜索就能找到的知识,那它就没多大的意思了,所以本书不是Python 句法指南,也不是Web 开发教程。我希望教会你的,是如何使用TDD 理念,更加稳妥地实现我们共同的神圣目标——简洁可用的代码。 即便如此,我仍会从零开始使用Django、Selenium、jQuery 和Mock 等工具开发一个Web 应用,不断提到一个真实可用的示例。阅读本书之前,你无须了解这些工具。读完本书后,你会充分了解这些工具,并掌握TDD 理念。 在极限编程实践中,我们总是结对编程。写这本书时,我设想自己和以前的自己结成对子,向以前的我解释如何使用这些工具,回答为什么要用这种特别的方式编写代码。所以,如果我表现得有点儿屈尊俯就,那是因为我不是那么聪明,我要对自己很有耐心。如果觉得我说话冒犯了你,那是因为我有点儿烦人,经常不认同别人的说法,所以有时要花很多时间论证,说服自己接受他人的观点。 本书结构 我将这本书分成了三个部分。 第一部分(第1~7 章):基础知识 开门见山,介绍如何使用TDD 开发一个简单的Web 应用。我们会先(用Selenium)写一个功能测试,然后介绍Django 的基础知识,包括模型、视图和模板。在每个阶段, 我们都会编写严格的单元测试。除此之外,我还会向你引荐测试山羊。 第二部分(第8~17 章):Web 开发要素 介绍Web 开发过程中一些棘手但不可避免的问题,并展示如何通过测试解决这些问题, 包括静态文件、部署到生产环境、表单数据验证、数据库迁移和令人畏惧的JavaScript。 第三部分(第18~26 章):高级话题 介绍模拟技术、集成第三方系统、测试固件、由外而内的TDD 流程以及持续集成(Continuous Integration,CI)。 排版约定 本书使用了下列排版约定。 黑体 表示新术语或强调的内容。 等宽字体(Constant width) 表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。 加粗等宽字体(Constant width bold) 表示应该由用户输入的命令或其他文本。 偶尔使用[...] 符号表示省略了一些内容,截断较长的输出,或者跳到相关的内容。 该图标表示提示或建议。 该图标表示提示、建议或一般注记。 该图标表示警告或警示。 提交勘误 发现了错误或错别字?本书的相关资源放在GitHub 上,欢迎你随时提交工单和拉取请求: https://github.com/hjwp/Book-TDD-Web-Dev-Python/。 如果发现中文版有错误或错别字,欢迎提交勘误至http://www.ituring.com.cn/book/2052。 使用代码示例 代码示例可到https://github.com/hjwp/book-example/ 下载,各章的代码都放在单独的分支中,请到http://www.ituring.com.cn/book/2052“随书下载”处下载。附录J 中有这个仓库的使用方法。 本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无须联系我们获得许可。比如,用本书的几个代码片段写一个程序就无须获得许可,销售或分发O’Reilly 图书的示例光盘则需要获得许可;引用本书中的示例代码回答问题无须获得许可,将书中大量的代码放到你的产品文档中则需要获得许可。 我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN。比如:“Test-Driven Development with Python, 2nd edition, by Harry Percival (O’Reilly). Copyright 2017 Harry Percival, 978-1-491-95870-4.” 如果你觉得自己对示例代码的用法超出了上述许可的范围,欢迎你通过permissions@ oreilly.com 与我们联系。 O’Reilly Safari Safari(以前叫Safari Books Online,http://www.safaribookson line.com) 是会员制平台,为企业、政府、教学人员和个人提供培训和参考资料。 会员可以访问上千种图书、培训视频、学习路径、交互式教程和精心制定的播放列表。这些资源由250 多家出版社提供,包括O’Reilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett 和Course Technology,等等。 详情请访问http://oreilly.com/safari。 联系我们 请把对本书的评价和问题发给出版社。 美国: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 中国: 北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035) 奥莱利技术咨询(北京)有限公司 O’Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是: hhttp://shop.oreilly.com/product/0636920029533.do 对于本书的评论和技术性问题,请发送电子邮件到:bookquestions@oreilly.com。 要了解更多O’Reilly 图书、培训课程、会议和新闻的信息,请访问以下网站: http://www.oreilly.com 我们在Facebook 的地址如下:http://facebook.com/oreilly 请关注我们的Twitter 动态:http://twitter.com/oreillymedia 我们的YouTube 视频地址如下:http://www.youtube.com/oreillymedia 电子书 如需购买本书电子版,请扫描以下二维码。

>Python测试驱动开发

Python测试驱动开发
作者: [英] 哈利 • J.W. 帕西瓦尔
副标题: 使用Django、Selenium和JavaScript进行Web编程(第2版)
原作名: Test-Driven Development with Python: Obey the Testing Goat: Using Django, Selenium, and JavaScript 2nd Edition
isbn: 7115485577
书名: Python测试驱动开发
页数: 488
译者: 安道
定价: 119.00元
出版社: 人民邮电出版社
出版年: 2018-7
装帧: 平装