本书的前身是我在 Everyday Rails 网站上发布的一系列博客文章。五年前,我开始记录自己学习测试 Rails 应用的经验,结果大受欢迎,因此我决定再添加一些内容和完整的示例代码,集结成书。本书出版后,销量完全超出了我的预想,而且帮助了众多与我当时面临相同困境的人们。
软件是个有趣的东西,关键就在这个“软”字上,它不是一成不变的。随着认识的深入,我们会调整解决问题的方法。我现在编写测试的知识依然源自原先那些博客文章和本书的第一版,但是随着时间的变迁,我掌握了一些新技术,摒弃了一些旧技术,还不断打磨可以沿用的技术。
过去的一年,我面临一个棘手的问题:如何把我掌握的技术体现到此次改版中,让新开发者能从中受益,根据自身的情况增补自己的知识,打造出适用于自己的一套测试方案?幸运的是,本书一直采用的学习策略仍然适用:从一个简单的应用入手,适当地在浏览器中测试(也可以使用 Postman 等测试 API);从小处着手测试,不断积累,构建起复杂的测试组件。我们要习惯反向思维,先测试,再编写实现代码。随着时间的推移,建立自己的有效测试策略。
此外,我对本书前几版使用的示例应用不太满意。起初我的想法是尽量保持简单,让读者能记住来龙去脉,这样方便介绍测试概念;但正是因为太过简单了,有时反而会造成困扰:代码太少,覆盖度不够。所以此次改版,我下决心一章一章修改代码,然而即使我只应用最简单的改动,也会导致版本控制系统出现冲突。这一版的示例应用比以往要复杂一些(但还没复杂到难以理解),用起来更得心应手。这是我近些年来第一次没有先编写测试而开发出来的应用。
艰辛的改版过程就说到这里,我希望你能从本书中获益,不管你是刚接触测试,还是想知道我对测试驱动开发的观点,抑或是想了解自第一版以来测试方式的变迁。