前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Effective Testing with RSpec 3(介绍)

Effective Testing with RSpec 3(介绍)

作者头像
不知雨
发布2018-09-06 22:21:41
2K0
发布2018-09-06 22:21:41
举报

我们的测试再次被打破!”“为什么套件需要这么长时间才能运行?”“无论如何,我们从这些测试中获得了什么价值?”

多年过去了,技术发生了变化,但关于自动测试的抱怨是一样的。 团队试图改进代码并最终应对测试失败。 测试时间慢会降低生产力。 写得不好的测试在沟通,指导软件设计或捕获错误方面做得不好。

无论您是自动化测试新手还是多年来一直使用它们,本书都将帮助您编写更有效的测试。 有效的,我们的意思是测试,它给你的价值比写它们的时间更多。

我们将使用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代码,供您在文本编辑器中输入,以便以后运行它们。 这是一个例子:

代码语言:javascript
复制
00-introduction/01/type_me_in.rb 
puts "You can type me in; it's okay!"

我们将一次显示几行代码文件。 如果您需要更多任何给定代码段的上下文,您可以单击文件名标题(在eBook中)或打开书籍的源代码(在本章末尾链接)以立即查看整个文件。

一些代码示例没有横幅; 这些通常代表终端的会话,可以是交互式Ruby(IRB),也可以是像Bash这样的shell。 对于IRB片段,您将运行irb terminal命令,然后在绿色>>提示符后输入部分:

代码语言:javascript
复制
>> %w[Type in just the bit after the prompt].join(' ') 
=> "Type in just the bit after the prompt" 

我们将用绿色$提示代表shell会话。 与IRB会话一样,您不会输入提示或输出行,只需输入提示后的命令:

代码语言:javascript
复制
$ 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档