我们的测试再次被打破!”“为什么套件需要这么长时间才能运行?”“无论如何,我们从这些测试中获得了什么价值?”
多年过去了,技术发生了变化,但关于自动测试的抱怨是一样的。 团队试图改进代码并最终应对测试失败。 测试时间慢会降低生产力。 写得不好的测试在沟通,指导软件设计或捕获错误方面做得不好。
无论您是自动化测试新手还是多年来一直使用它们,本书都将帮助您编写更有效的测试。 有效的,我们的意思是测试,它给你的价值比写它们的时间更多。
我们将使用RSpec 3框架来探索编写测试的艺术。 RSpec的每个方面都旨在解决开发人员在野外遇到的一些问题。 有了它,您可以放心地构建Ruby应用程序。
如何使用本书
通过本书,您将分三个阶段学习RSpec 3:
•第一部分:介绍练习,让您熟悉RSpec
•第二部分:跨越几个章节的工作示例,以便您可以在一个有意义的大小项目中看到RSpec
•第III-V部分:RSpec特定方面的一系列深入研究,将帮助您充分利用RSpec
我们把这本书写成封面阅读封面。 无论您的专业水平如何,按顺序阅读章节将为您提供最大的价值。 但是,如果你时间紧迫并想知道首先要去哪里,我们可以提出一些建议。
如果您熟悉其他测试框架但是对RSpec不熟悉,我们建议您阅读本书的前两部分,然后在一个部分中尝试RSpec你自己的项目。 当您这样做时,您可能会有一些问题,您可以参考具体的深入分析章节。
如果您是RSpec的长期用户,您可以从第III,IV和V部分开始。这些包含您在野外可能遇到的情况的详细配方。 稍后,您可以回到本书的开头,重温RSpec的理念。
最后,如果您每天使用RSpec 3,请将本书的深入部分放在附近。 在特定情况下你会发现它们很方便 - 我们这样做,而且我们多年来一直在使用RSpec!
代码片段
我们在本书中提供了代码片段,展示了如何在实际情况中使用RSpec。 这些示例中的大多数旨在供您在计算机上使用,尤其是第I部分和第II部分中的示例。
典型的代码片段将包含一行或多行Ruby代码,供您在文本编辑器中输入,以便以后运行它们。 这是一个例子:
00-introduction/01/type_me_in.rb
puts "You can type me in; it's okay!"
我们将一次显示几行代码文件。 如果您需要更多任何给定代码段的上下文,您可以单击文件名标题(在eBook中)或打开书籍的源代码(在本章末尾链接)以立即查看整个文件。
一些代码示例没有横幅; 这些通常代表终端的会话,可以是交互式Ruby(IRB),也可以是像Bash这样的shell。 对于IRB片段,您将运行irb terminal命令,然后在绿色>>提示符后输入部分:
>> %w[Type in just the bit after the prompt].join(' ')
=> "Type in just the bit after the prompt"
我们将用绿色$提示代表shell会话。 与IRB会话一样,您不会输入提示或输出行,只需输入提示后的命令:
$ echo 'RSpec is great!' RSpec is great!
在本书的后面,我们有时会从一个更大的项目中显示出孤立的片段; 这些并不适合您在计算机上运行。 如果您对自己运行它们感兴趣,可以从本书的源代码存储库下载所有项目文件。
大多数章节都有一个“轮到你”部分,练习可供您试用。 不要跳过这些! 单独练习将确保每章都以您在本书中学到的技能为基础。
RSpec和行为驱动的开发
RSpec将自己称为行为驱动开发(BDD)测试框架。我们想花点时间谈谈我们对该术语的使用,以及相关术语,测试驱动开发(TDD)。
如果没有TDD,您可以通过手动运行或编写一次性测试工具来检查程序的行为。如果您打算在不久之后废弃该程序,这些方法都可以。但是,当长期维护是一个优先事项时,TDD提供了重要的好处。
使用TDD,您可以在实现下一个行为之前编写每个测试用例。如果您有完善的测试,那么您可以使用更加可维护的代码。您可以放心地进行更改,您的测试套件会在您破坏某些内容时通知您。
不过,TDD这个词有点用词不当。尽管名称中有“test”这个词,但TDD不仅仅是关于你的测试。这是关于他们为您的设计实现无畏改进的方式。出于这个原因,Dan North在2006年创造了行为驱动开发一词,以封装TDD.1中最重要的部分
BDD将重点放在应有的位置:代码的行为。社区强调了测试中表达力的重要性,我们将在本书中讨论很多内容。 BDD也是以同样的关怀来处理您的软件需求,因为它们是行为的另一种表达。这是关于让所有利益相关者参与编写验收测试。
作为一个测试框架,RSpec非常适合BDD工作流程。 RSpec帮助您“正确理解”并准确指出您在测试中的意思。 您可以轻松练习BDD所偏好的从外到内的方法,在那里您从验收测试开始并向内移动到单元测试.2在每个级别,您的表达测试将指导您的软件设计。
但是,RSpec和BDD不是同义词。 您不必练习BDD来使用RSpec,也不必使用RSpec来练习BDD。 BDD的大部分都超出了RSpec的范围; 例如,我们不会在本书中谈论利益相关者的参与。
我们是谁
Myron Marston于2009年开始使用RSpec,并于2010年开始为其做出贡献。自2012年底以来,他一直是其主要的维护者。以下是他对RSpec做出的几项重大改进:
•可组合匹配器,完全表达您需要的通过/失败标准
•rspec --bisect,它找到重现失败的最小测试用例集
•将RSpec的断言和模拟库与Ruby附带的Minitest框架集成
•--only-failures和--next-failure选项,让您可以重新运行失败的测试,以便更快地修复错误
凭借Myron在本书中提供的内幕知识,您将学习所有这些技术等等。最后,您将能够免除测试套件遇到的任何问题。
Ian Dees在2006年偶然发现了RSpec的旧测试版。这正是他为嵌入式触摸屏设备构建自动验收测试所需要的。从那时起,他就使用和教授RSpec来测试从微型微控制器到全功能桌面和Web应用程序的所有内容。
你是谁
我们希望本书对广泛的开发人员非常有用,从刚刚开始使用RSpec的人到使用它编写成千上万的测试的人。也就是说,我们做了一些假设,以防止本书过于陷入介绍性材料。
首先,我们假设您熟悉Ruby。 你不需要成为专家。 在大多数情况下,我们坚持使用类,方法和块的基础知识。 我们将指导您安装几个Ruby宝石,因此熟悉该过程也很有用。 如果您是Ruby的新手,我们建议您首先使用Zed Shaw的Learn Ruby the Hard Way eBook或者exercise.io.3,4上的Ruby教程等资源来学习一些语言。
虽然您将在几个章节中构建Web服务,但我们并不认为您已经是Web开发人员。 很多人使用RSpec来测试命令行应用程序,GUI应用程序等。 我们将在讨论过程中解释一些Web开发概念。
当我们有针对特定受众的内容时 - 例如来自旧版RSpec的人或不熟悉Web开发的人 - 我们会将这些内容放在侧边栏中。
关于版本的注释
我们在本书中使用的库,包括来自RSpec框架的库和其他依赖项(如Sinatra和Sequel),旨在向后兼容小版本升级。 您在这里看到的代码示例在这些库的未来版本中应该可以正常工作 - 至少在它们的下一个主要版本之前。
虽然我们已经在Ruby 2.2上测试了多个Ruby版本的代码,但是如果您按照我们在文本中提到的完全相同的版本,您将获得最佳体验:Ruby 2.4,RSpec 3.6等等。 使用我们使用的相同版本,您应该获得与我们在书中显示的内容非常相似的输出。
在线资源
这本书有一个网站.5在那里,你会找到源代码,论坛和勘误表的链接。 我们还设置了GitHub存储库,其中包含本书中的所有示例,以及您将构建的一个项目版本。
应用RSpec 3.6
3. https://learnrubythehardway.org 4. http://exercism.io/languages/ruby/about 5. https://pragprog.com/book/rspec3/effective-testing-with-rspec-3 6. https://github.com/rspec-3-book
有关RSpec的更多信息,您可以转到官方站点和完整的开发人员文档.7,8
迈伦马斯顿
RSpec的主要维护者
myron.marston@gmail.com
西雅图,华盛顿州,2017年8月
伊恩迪斯
高级软件工程师,New Relic
undees@gmail.com
俄勒冈州波特兰,2017年8月
7. http://rspec.info 8. http://rspec.info/documentation/
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。